문제 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 |