본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 삼각 달팽이

by 현장 2026. 4. 5.

-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씩 줄어드므로 기준만 있으면 된다라는 것을 알게되어 해결했습니다.