[프로그래머스/181832] 정수를 나선형으로 배치하기
in Study / Coding Test
☑️ 문제
☑️ 풀이
//시간: 0.11ms
//메모리: 81.3MB
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
boolean[][] visited = new boolean[n][n];
int[] dx = {0, 1, 0, -1}; // 우, 하, 좌, 상
int[] dy = {1, 0, -1, 0};
int x = 0, y = 0, dir = 0, num = 1;
while (num <= n * n) {
answer[x][y] = num++;
visited[x][y] = true;
int nx = x + dx[dir];
int ny = y + dy[dir];
if (nx < n && ny < n && nx >= 0 && ny >= 0 && !visited[nx][ny]) {
x = nx;
y = ny;
} else {
dir = (dir + 1) % 4;
x += dx[dir];
y += dy[dir];
}
}
return answer;
}
}
- dx,dy 테크닉을 이용하여
우 → 하 → 좌 → 상
순서로 방향으로 바꾸며 배열을 채워나갔다. visited
배열을 사용하여 이동이 가능한 지 체크하고, 만약 이동이 불가능하다면 방향을 바꾼다.- 다음 방향은 나머지 연산을 통해
(dir + 1) % 4
로 계산한다.
- 다음 방향은 나머지 연산을 통해