[프로그래머스]#68645 삼각 달팽이

SeungBird·2020년 9월 14일
0

문제

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

제한사항

  • n은 1 이상 1,000 이하입니다.

예제 입력 1

4

예제 출력 1

[1,2,9,3,10,8,4,5,6,7]

예제 입력 2

5

예제 출력 2

[1,2,12,3,13,11,4,14,15,10,5,6,7,8,9]

예제 입력 3

6

예제 출력 3

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

풀이

이 문제는 프로그래머스에서 진행한 챌린지 문제로 크게 어렵진 않았던 .

class Solution {
    public int[] solution(int n) {
        int N = leng(n);
        int[] answer = new int[N];
        int[][] map = new int[n][n];
        for(int i=0; i<n; i++) {
            for(int j=0; j<=i; j++)
                map[i][j] = -1;
        }
        
        int num = 2;
        int i=0;
        int j=0;
        map[i][j] = 1;
        
        loop:while(num<=N) {
            while(true) {
                if(i+1>=n || map[i+1][j]!=-1) break;
                map[i+1][j] = num;
                i++;
                num++;
                if(num>N) break loop;
            }
            
            while(true) {
                if(j+1>=n || map[i][j+1]!=-1) break;
                map[i][j+1] = num;
                j++;
                num++;
                if(num>N) break loop;
            }
            
            while(true) {
                if(i-1<0 || j-1<0 || map[i-1][j-1]!=-1) break;
                map[i-1][j-1] = num;
                i--;
                j--;
                num++;
                
                if(num>N) break loop;
            }
        }
        
        int idx = 0;
        for(int k=0; k<n; k++) {
            for(int l=0; l<k+1; l++) {
                answer[idx] = map[k][l];
                idx++;
            }
        }
        
        return answer;
    }
    
    public int leng(int n) {
        if(n==1)
            return 1;
        
        return n+leng(n-1);
    }
}
profile
👶🏻Jr. Programmer

0개의 댓글