프로그래머스 - 삼각 달팽이 (Level 2)

2023. 12. 22. 17:03코딩테스트 정리(자바)

728x90

1. private static final은 모든 인스턴스에서 공유되는 상수 값을 저장하는데 사용되고, 
private final은 각 인스턴스마다 고유한 값을 가지면서 그 값을 변경할 수 없게 하고 싶을 때 사용한다.

2. 1차원 배열 원소 직접 초기화하기
: int[] dx={0,1,-1};

 

class Solution {
     //x,y 좌표변화량: 아래로, 오른쪽으로, 왼쪽위로
        //static final로 쓴 이유: 변하지 않는 상수이므로 
        private static final int[] dx={0,1,-1};
        private static final int[] dy={1,0,-1};
    
    public int[] solution(int n) {
        //1. 숫자 저장할 n*n크기의 2차원 배열 만들기
        int[][] triangle=new int[n][n]; //0으로 다 초기화 되어있음
        
        //2. 변수 선언
        int x=0; //x좌표
        int y=0; //y좌표
        int d=0; //방향: 0이면 아래, 1이면 오른쪽, 2이면 왼쪽 위로
        int v=1; //배열 채울 숫자값
        
        //3. 반복문으로 채우기
        while(true){
            triangle[y][x]=v++; //숫자 채우기
            
            int ny=y+dy[d];
            int nx=x+dx[d];
            
            if(nx == n || ny == n  || triangle[ny][nx] != 0 ){ //진행하지 못하면 방향바꾸기
                d=(d+1)%3;
                ny=y+dy[d];
                nx=x+dx[d];
                if(nx == n || ny == n  || triangle[ny][nx] != 0) //방향을 틀어도 진행하지 못하면 종료
                    break;
            }
            //좌표이동
            x+=dx[d];
            y+=dy[d];     
        }
        // 4. 1차원 배열로 옮겨담기
        int[] answer =new int[v-1];
        int i=0;
        for(int y_=0;y_<n;y_++){
            for(int x_=0;x_<y_+1;x_++){
                answer[i++]=triangle[y_][x_];
            }
        }
       
        return answer;
    }
}
728x90