728x90
이해하기
비슷한 문제를 그래도 좀 풀었다고 생각했는데 항상 바로바로 떠오르지가 않는다.
- 넣어줄 값인 value (초기값 1로 시작)
- 행과 열 row, col
- 방향 direction (초기값 0)
- value가 n * n일 때까지 while문 반복
- answer[row][col]에 value 넣고 value += 1
- 방향이 0이면 (오른쪽으로 이동)
- col이 n - 1이거나 현 위치의 오른쪽에 0이 아닌 다른 값이 들어있는 경우
- 방향 전환 : 1
- row++
- 아니라면 col++
- col이 n - 1이거나 현 위치의 오른쪽에 0이 아닌 다른 값이 들어있는 경우
- 방향이 1이면 (아래쪽으로 이동)
- row가 n - 1이거나 현 위치의 아래쪽에 0이 아닌 다른 값이 들어있는 경우
- 방향 전환 : 2
- col--
- 아니라면 row++
- row가 n - 1이거나 현 위치의 아래쪽에 0이 아닌 다른 값이 들어있는 경우
- 방향이 2이면 (왼쪽으로 이동)
- col이 0이거나 현 위치의 왼쪽에 0이 아닌 다른 값이 들어있는 경우
- 방향 전환 : 3
- row--
- 아니라면 col--
- col이 0이거나 현 위치의 왼쪽에 0이 아닌 다른 값이 들어있는 경우
- 방향이 3이면 (위로 이동)
- row가 0이거나 현 위치의 위쪽에 0이 아닌 다른 값이 들어있는 경우
- 방향 전환 : 0
- col++
- 아니라면 row--
- row가 0이거나 현 위치의 위쪽에 0이 아닌 다른 값이 들어있는 경우
문제풀이
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int value = 1;
int row = 0;
int col = 0;
int direction = 0;
while (value <= n * n) {
answer[row][col] = value++;
if (direction == 0) {
if (col == n - 1 || answer[row][col + 1] != 0) {
direction = 1;
row++;
} else {
col++;
}
} else if (direction == 1) {
if (row == n - 1 || answer[row + 1][col] != 0) {
direction = 2;
col--;
} else {
row++;
}
} else if (direction == 2) {
if (col == 0 || answer[row][col - 1] != 0) {
direction = 3;
row--;
} else {
col--;
}
} else {
if (row == 0 || answer[row - 1][col] != 0) {
direction = 0;
col++;
} else {
row--;
}
}
}
return answer;
}
}
'JAVA > Coding Test Study' 카테고리의 다른 글
[Lv.1] 프로그래머스 - 개인정보 수집 유효기간 : Java (0) | 2024.05.13 |
---|---|
[Lv.0] 프로그래머스 - 진료순서 정하기 : Java (0) | 2024.05.10 |
[Lv.0] 프로그래머스 - 구슬을 나누는 경우의 수 : Java (0) | 2024.05.10 |
[Lv.0] 프로그래머스 - 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 : Java (0) | 2024.05.10 |
[Lv.1] 프로그래머스 - 기사단원의 무기 : Java (0) | 2024.05.10 |