본문 바로가기
자료구조 & 알고리즘/문제 풀이 (프로그래머스)

삼각 달팽이 (델타 배열)

by 정구정구 2026. 6. 23.

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/68645

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

문제 풀이

1 0 0 0
2 9 0 0
3 10 8 0
4 5 6 7

       ( 예시) n=4인 경우 )

  • 예시와 같이, 코딩에 맞게 삼각형의 구조를 바꾸고 [2차원 배열] + [델타 배열]로 구현하면 됨

 

 

작성한 코드 (정답)

class Solution {
    public int[] solution(int n) {
        
        int blockSize = n*(n+1)/2;
        
        int[] answerArray = new int[blockSize];

        int[][] block = new int[n][n];

        int curX = 0;
        int curY = 0;

        // 방향 (아래, 오른쪽, 왼쪽 위)
        int d = 0;
        int[] dx = {0, 1, -1};
        int[] dy = {1, 0, -1};

        for(int i = 1; i <= blockSize; i++) {

            block[curX][curY] = i;
            
            // 다음으로 이동 할 좌표 확인
            int nextX = curX + dx[d];
            int nextY = curY + dy[d];

            // 방향 바꿈 체크
            if (nextX >= n || nextY >= n ||  nextX < 0 || nextY < 0 || block[nextX][nextY] != 0) {
                d = (d+1) % 3;

                nextX = curX + dx[d];
                nextY = curY + dy[d];
            }

            curX = nextX;
            curY = nextY;
        }        

        // 정답 배열 작성 
        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (block[j][i] == 0) continue;
                answerArray[count] = block[j][i];
                count++;
            }
        }

        return answerArray;
    }
}

 

참고 : https://record47584.tistory.com/36

 

델타 배열을 이용해 2차원 배열 탐색하기

2차원 배열"행(row)"과 "열(column)" 두 차원을 가진 배열 (논리적 시점) 1차원 배열을 요소로 가지는 배열 (코드 시점) 2차원 배열을 활용하면, 게임의 보드판(예: 오목판, 체스판), 이미지의 픽셀 정보

record47584.tistory.com

 

'자료구조 & 알고리즘 > 문제 풀이 (프로그래머스)' 카테고리의 다른 글

모음 사전 (DFS)  (0) 2026.06.25
소수 찾기 (DFS)  (0) 2026.06.24
가장 큰 수  (0) 2026.06.22
다리를 지나가는 트럭 (큐)  (0) 2026.06.19
롤케이크 자르기  (0) 2026.06.18