[Programmers]-삼각 달팽이

문제

문제

코드

import java.util.*;

class Solution {
    public int[] solution(int n) {
        int[] answer = new int[((n+1)*n)/2];//팩토리얼
        
        int[][] arr = new int[n][n];
        
        int x = 0;
        int y = -1;
        
        int count = n;
        int number = 1;
        
        while(true){
            for(int i=0;i<count;i++){//아래로
                y++;
                arr[y][x] = number;
                number++;
            }
            count--;
            if(count == 0) break;
            
            for(int i=0;i<count;i++){//오른쪽으로
                x++;
                arr[y][x] = number;
                number++;
            }
            count--;
            if(count == 0) break;
            
            for(int i=0;i<count;i++){//왼위로
                y--;
                x--;
                arr[y][x] = number;
                number++;
            }
            count--;
            if(count == 0) break;
        }
        
        int k =0;
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[0].length;j++){
                if(arr[i][j] == 0) continue;
                answer[k] = arr[i][j];
                k++;
            }
        }
        return answer;
    }
    
}

코드 설명

리턴배열을 팩토리얼 합으로 크기를 정한다.

순서가 아래, 오른쪽, 왼쪽위로 올라가게 된다.

이걸 반복하면 된다.

2차원배열에 좌표를 찍어 준다.

2차원배열을 리턴배열에 넣어준다.

요약

  • 팩토리얼의 합 : ((n+1)*n)/2