
-Code
class Solution {
// 3개의 방향 셋팅
static int[] dRow = {1, 0, -1};
static int[] dCol = {0, 1, -1};
public int[] solution(int n) {
// 총 사용 숫자 범위
int total = (n * (n + 1)) / 2;
int[][] board = new int[n][n];
// 위치 보정을 위한 -1, 시작 숫자 지정
int row = -1, col = 0, num = 1;
for (int i = 0; i < n; i++) {
// 이동 횟수가 한변 채울때 마다 -1이므로 i부터 시작
for (int j = i; j < n; j++) {
// 이동 방향 셋팅
row += dRow[i % 3];
col += dCol[i % 3];
board[row][col] = num;
num++;
}
}
// 결과 저장
int[] answer = new int[total];
int idx = 0;
for (int r = 0; r < n; r++) {
for (int c = 0; c < n; c++) {
if (board[r][c] == 0) {
break;
}
answer[idx++] = board[r][c];
}
}
return answer;
}
}
처음에는 이동 방향을 셋팅하고 배열의 끝에 도달하거나 하면 값을 변경하면서 이동 방향을 수정하려 했으나 잘 안됐습니다.
그래서 힌트 조금 찾아보니 어차피 방향 전환이 n만큼 이므로 해방 부분을 기준으로 삼고 방향 전환시마다 이동 횟수가 1씩 줄어드므로 기준만 있으면 된다라는 것을 알게되어 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 2개 이하로 다른 비트 (0) | 2026.04.06 |
|---|---|
| [백준/Java] 24035번 Impartial Offerings (0) | 2026.04.06 |
| [백준/Java] 33904번 삼각형 (1) | 2026.04.05 |
| [프로그래머스/Java] 오픈채팅방 (0) | 2026.04.05 |
| [백준/Java] 33904번 불필요한 for문 (0) | 2026.04.04 |