알고리즘/프로그래머스

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

justkeepgoing 2021. 1. 6. 14:31
728x90
반응형

1. 문제

programmers.co.kr/learn/courses/30/lessons/68645?language=java

 

코딩테스트 연습 - 삼각 달팽이

5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

programmers.co.kr

2. 풀이

  • 배열문제, 별찍기가 생각났다.

3. 코드

class Solution {
    public int[] solution(int n) {
        int max = getMax(n);
        int[] answer = new int[max];
        int[][] arr = new int[n][n];
        for(int i =0; i<n; i++){
            for(int j =0; j<=i; j++){
                arr[i][j] = 0;
            }
        }
        int r=0, c=0, k=1;
        arr[r][c] = k;

        while(k<max){
            while(r+1<n && arr[r+1][c]==0){
                arr[++r][c] = ++k;
            }
            while(c+1<n && arr[r][c+1]==0){
                arr[r][++c] = ++k;
            }
            while (r-1>0 && c-1>0 && arr[r-1][c-1]==0){
                arr[--r][--c] = ++k;
            }
        }
        int idx=0;
        for(int i =0; i<n; i++){
            for(int j =0; j<=i; j++){
                answer[idx++] = arr[i][j];
            }
        }
        return answer;
    }
       static int getMax(int n){
        if(n==1) return 1;
        return getMax(n-1)+n;
    }
}

 

반응형

 

반응형