728x90
코드 힌트
- 방향 배열 설정:
- 상, 좌, 하, 우 방향을 배열 dx와 dy를 사용하여 정의합니다. 각각의 방향은 (x, y) 좌표에서의 이동을 나타냅니다. 예를 들어, (1, 0)은 오른쪽으로 이동하는 것을 의미합니다.
- 결과 배열 초기화:
- int[][] result = new int[n][n];를 사용하여 n x n 크기의 배열을 생성합니다. 이 배열은 숫자를 채우기 위한 결과 배열입니다. 배열의 기본값은 0입니다.
- 변수 초기화:
- 숫자 num을 1로 초기화하고, 현재 위치를 (0, 0)으로 설정합니다. direction 변수를 0으로 초기화하여 오른쪽 방향으로 시작합니다.
- 숫자 채우기:
- 현재 위치가 배열의 유효한 위치이고, 그 위치에 숫자가 아직 채워져 있지 않으면, 현재 위치에 숫자를 채우고 숫자를 증가시킵니다.
- 방향 변경:
- 현재 위치가 유효하지 않거나 이미 값이 채워져 있는 경우, 이전 방향으로 되돌아가서 방향을 변경합니다. 방향을 변경할 때는 direction을 업데이트하여 새로운 방향으로 이동할 수 있게 합니다.
- 다음 위치로 이동:
- 현재 방향에 따라 (x, y) 좌표를 업데이트하여 다음 위치로 이동합니다. 방향이 바뀔 때마다 좌표를 업데이트하고, 배열의 범위를 벗어나지 않도록 체크합니다.
- 결과 반환:
- 배열 result를 완성한 후, 결과를 반환합니다. 배열은 숫자가 스파이럴 형태로 채워진 상태입니다.
정답은 더보기 클릭
더보기
class Solution {
public int[][] solution(int n) {
// 상, 좌, 하, 우 방향을 나타내는 배열
int[] dx = {1, 0, -1, 0};
int[] dy = {0, -1, 0, 1};
// 결과 배열을 생성
int[][] result = new int[n][n];
int num = 1; // 배열에 채울 숫자
int x = 0, y = 0; // 현재 위치
int direction = 0; // 현재 방향 (0: 오른쪽, 1: 위쪽, 2: 왼쪽, 3: 아래쪽)
while (num <= n * n) {
// 현재 위치가 유효하고 값이 0이면 숫자를 채운다
if (x >= 0 && x < n && y >= 0 && y < n && result[y][x] == 0) {
result[y][x] = num++;
} else {
// 유효하지 않은 위치일 때, 방향을 되돌리고 방향을 변경
x -= dx[direction];
y -= dy[direction];
direction = (direction + 1) % 4;
}
// 다음 위치로 이동
x += dx[direction];
y += dy[direction];
}
return result;
}
728x90
'프로그래머스(Java) > Level 0' 카테고리의 다른 글
[프로그래머스] 전국 대회 선발 고사 (0) | 2024.08.13 |
---|---|
[프로그래머스] 그림 확대 (0) | 2024.08.13 |
[프로그래머스] 정사각형으로 만들기 (0) | 2024.08.13 |
[프로그래머스] 무작위로 K개의 수 뽑기 (0) | 2024.08.13 |
[프로그래머스] 두 수의 합 (0) | 2024.08.13 |