정수를 나선형으로 배치하기
🔍 알고리즘 분류
💡 문제 풀이
- 처음에 배열을 모두
0으로 초기화
왼->오, 위->아래, 오->왼, 아래->위 순서로 진행하며 0이 아닐 때에만 num++
- 한 바퀴 돌면
cycle++
📄 코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<vector<int>> solution(int n) {
vector<vector<int>> answer(n, vector<int>(n, 0));
int num = 1;
int cycle = 0;
while (num <= n*n) {
for (int i = 0; i < n; i++) {
if (!answer[cycle][i]) {
answer[cycle][i] = num;
num++;
}
}
for (int i = 0; i < n; i++) {
if (!answer[i][n - 1 - cycle]) {
answer[i][n - 1 - cycle] = num;
num++;
}
}
for (int i = n - 1; i >= 0; i--) {
if (!answer[n - 1 - cycle][i]) {
answer[n - 1 - cycle][i] = num;
num++;
}
}
for (int i = n - 1; i >= 0; i--) {
if (!answer[i][cycle]) {
answer[i][cycle] = num;
num++;
}
}
cycle++;
}
return answer;
}
def solution(n):
answer = [[0] * n for _ in range(n)]
x, y = 0, 0
dir = 0
for num in range(1, n * n + 1):
answer[x][y] = num
if num == n * n:
break
if dir == 0:
y += 1
if y == n - 1 or answer[x][y + 1] != 0:
dir = (dir + 1) % 4
elif dir == 1:
x += 1
if x == n - 1 or answer[x + 1][y] != 0:
dir = (dir + 1) % 4
elif dir == 2:
y -= 1
if y == 0 or answer[x][y - 1] != 0:
dir = (dir + 1) % 4
elif dir == 3:
x -= 1
if x == 0 or answer[x - 1][y] != 0:
dir = (dir + 1) % 4
return answer