25.09.14

  • 삼각형을 이차원으로 표현하는걸 못떠올림
  • (n)(n-1)/2 이거였나 여튼 공식이 필요했음…
import java.util.*;

class Solution {
    static int[] di = {1,0,-1};  // 아래, 오른쪽, 왼쪽위
    static int[] dj = {0,1,-1};
    static int[][] arr;
    
    public int[] solution(int n) {
        if(n==1) return new int[]{1};
        
        arr = new int[n][n];
        int total = n*(n+1)/2;  // 채워야 하는 총 개수
        int cnt = 1;
        int preI = 0, preJ = 0, dir = 0;
        arr[0][0] = 1;
        
        while(cnt < total){
            int ni = preI + di[dir];
            int nj = preJ + dj[dir];
            
            if(!isBlank(ni,nj)){   // 못 가면 방향 바꿈
                dir = (dir+1)%3;
                continue;
            }
            
            ++cnt;
            arr[ni][nj] = cnt;
            preI = ni;
            preJ = nj;
        }
        
        List<Integer> list = new ArrayList<>();
        for(int i=0;i<n;i++){
            for(int j=0;j<=i;j++){   // 삼각형 부분만
                list.add(arr[i][j]);
            }
        }
        
        int[] answer = new int[list.size()];
        for(int i=0;i<list.size();i++){
            answer[i] = list.get(i);
        }
        return answer;
    }
    
    public boolean isBlank(int i, int j){
        if(i<0 || i>=arr.length || j<0 || j>=arr.length) return false;
        if(arr[i][j] != 0) return false;
        return true;
    }
}