[algorithms] 프로그래머스 - 삼각 달팽이 (Java)

stanley.·2024년 4월 10일
0

알고리즘

목록 보기
9/9
post-thumbnail

개요

본 문제는 2차원 배열을 아래 - 오른쪽 - 왼쪽 위 (반시계) 순으로 탐색하는 풀이를 통해 해결할 수 있다. 방향 전환의 경우 아래, 오른쪽, 왼쪽 위 까지 총 3가지 경우이므로 % 연산자를 통해 3개의 방향 case를 반복하여 방향이 전환되는 경우 좌표 변수를 갱신하고 올바른 방향으로 이동하도록 한다.
마지막으로, 더 이상 전환된 방향으로도 이동이 불가한 경우에는 break문을 설정함으로써 문제 조건에 맞는 모든 숫자를 2차원 배열에 선언할 수 있다. 코드는 아래와 같다.

코드

import java.util.*;

class Solution {
    private static final int dx[] = {0,1,-1};
    private static final int dy[] = {1,0,-1};
    
    public int[] solution(int n) {
        
        int[][] answer = new int[n][n];
        
        int x =0;
        int y =0;
        int i = 1;
        int d = 0;
        
        while(true){
            
            answer[y][x] = i++;
            int nx = x + dx[d];
            int ny = y + dy[d];
            
            if (ny == n || nx == n || answer[ny][nx] != 0 ){
                //방향 전환
                d = (d+1) % 3;
                nx = x + dx[d];
                ny = y + dy[d];
                
                //전환된 방향으로도 진행을 하지 못하는 경우 : 마지막 숫자의 경우
                if(ny == n || nx == n || answer[ny][nx] != 0 ) break;  
            }
            x = nx;
            y = ny;
        }
        
        
        int result[] = new int[i-1];
        int idx = 0;
        for (int k =0; k< n; k++){
            for (int j = 0; j <= k; j++){
                result[idx++] = answer[k][j];
            }
        }
        
        return result;
    }
}
profile
🖥 Junior Developer.

0개의 댓글