알고리즘

프로그래머스 삼각 달팽이 (JAVA)

박카스마시며코딩 2023. 5. 18. 16:05

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

저는 구현을 통해 문제를 해결하였습니다.

저는 배열을 통해 삼각 달팽이를 표현하였고, y <= x  인 부분들만 사용하여 표현하였습니다.

저는 밑으로 가고 범위를 넘거나 채워져있다면 방향을 오른쪽으로 돌리고 또 범위를 넘기거나 채워져있다면 왼쪽 위 방향으로 진행하도록 하여 문제를 해결하였습니다.

 

class Solution {
    public int[] solution(int n) {
        int[] answer = makeMap(n);
        return answer;
    }
    
    private static final int[] DY = {1,0,-1};
    private static final int[] DX = {0,1,-1};
    private static final int EMPTY = 0;
    
    private static int[] makeMap(int n){
        int[][] map = new int[n][n];
        int num = 0;
        int y = 0;
        int x = 0;
        int dir = 0;
        while(y >= 0 && y < n && x >= 0 && x < n && map[y][x] == EMPTY){
            map[y][x] = ++num;
            y += DY[dir];
            x += DX[dir];
            if(y < 0 || y >= n || x < 0 || x >= n || map[y][x] != EMPTY){
                y -= DY[dir];
                x -= DX[dir];
                dir = (dir + 1) % 3;
                y += DY[dir];
                x += DX[dir];
            }
        }
        int[] result = new int[num];
        int index = 0;
        for(int i = 0 ; i < n ; i++){
            for(int j = 0 ; j < n ; j++){
                if(map[i][j] == EMPTY){
                    break;
                }
                result[index++] = map[i][j];
            }
        }
        return result;
    }
}