본문 바로가기
LeetCode

LeetCode 59 Spiral Matrix II

by 콩순이냉장고 2021. 2. 10.

문제 URL : leetcode.com/problems/spiral-matrix-ii/

 

문제 접근법  : 기초적인 달팽이 알고리즘 문제입니다.

c언어를 처음 접했을때 반복문 사용을 배우고나면 풀게되는 문제였었는데 그렇기 때문에 반복문을 이용해서 풀었습니다.

 

회전을 하기위해서 오른쪽 아래 왼쪽 위 이렇게 반복문이 4개가 필요합니다.

회전방향

이런식으로 여러번 n*n까지 채워넣어야하니 중첩을 이용해야 합니다. 그러나 아래 사진에 문제점이있습니다.

회전하기위한 반복문

이렇게 회전은 가능하지만 한번하여 제자리도 돌아올때 0,0지점에서 다시 또 숫자를 채워진다는 문제점입니다.

회전은 가능하나 채워진곳을 또 채운다

그렇다면 이걸 어떻게 해결하면 좋을까요??? 배열에 채워졌으면 다시 채우지 않는다는 조건만 주면됩니다. 

즉 for문안에 조건문에서 arr[y][x]가 숫자를 넣었는지 체크하기만하면 달팽이알고리즘이 완성됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//By 콩순이냉장고
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> arr(n,vector<int>(n,0));
        int cnt = 0;
        int y = -1, x = -1;
        while (cnt < n * n) {
            for (y++, x++; x < n&&arr[y][x]==0; x++)
                arr[y][x] = ++cnt;
            for (y++, x--; y < n&&arr[y][x]==0; y++)
                arr[y][x] = ++cnt;
            for (y--, x--; x >= 0&&arr[y][x]==0; x--)
                arr[y][x] = ++cnt;
            for (y--, x++; y >= 0&&arr[y][x]==0; y--)
                arr[y][x] = ++cnt;
        }
        return arr;
    }
};
cs

 

궁금한점 혹은 모르는점 더좋은 아이디어 가있다면 언제든지 댓글은 환영입니다.

 

'LeetCode' 카테고리의 다른 글

LeetCode 38 Count and Say  (0) 2021.07.15
LeetCode ZigZag Conversion  (0) 2021.07.14
LeetCode 28 Implement strStr()  (0) 2021.07.06
LeetCode #100 Same Tree  (0) 2021.01.06
LeetCode #17 Letter Combinations of a Phone Number  (0) 2021.01.06