삼각 달팽이 : https://school.programmers.co.kr/learn/courses/30/lessons/68645
삼각형이 n길이의 변과 n길이의 높이를 가질때, 상단 꼭짓점 부터 반시계방향으로 돌아 값을 채워넣어야 한다.
해당 문제를 풀때 삼각형이 아니라 왼쪽으로 정렬 시켜 값이 채워진 계단 형으로 생각하고 문제를 풀었다.
2차원 배열에서 [0][0]에서 n만큼 아래 방향
으로 값을 채우고, n-1만큼 오른쪽
으로 값을 채우고, n-2만큼 왼쪽 대각선
으로 값을 채워나가서 n-i이 0이 될 때까지 반복하면 모든 값을 채우게 된다.
그리고 각 index에서 index+1만큼의 값을 순서대로 채워서 반환하면 된다.
class Solution {
//아래, 오른쪽, 왼쪽 대각선 순차적으로 이동
static int[] dy = {1,0,-1};
static int[] dx = {0,1,-1};
public int[] solution(int n) {
int[][] triangle = new int[n][n];
int y = -1;
int x = 0;
int d = 0;
int num = 1;
//특정 방향으로 이동할 칸 수
for(int t = n;t>0;t--){
//이동
for(int i=0;i<t;i++){
y = y + dy[d];
x = x + dx[d];
triangle[y][x] = num++;
}
//해당 방향으로 이동했다면 방향을 바꿔준다.
d = (d+1)%3;
}
//삼각형을 채우기 위해서는 1~limit까지 숫자가 필요하다 (등차수열)
int limit = ((n*(1+n))/2);
int[] answer = new int[limit];
int idx=0;
//각 index에서 index+1개의 수를 가져와 순차적으로 넣어준다.
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
answer[idx++] = triangle[i][j];
}
}
return answer;
}
}
삼각형을 계단 형식으로 바꿔 생각한게 풀이의 팁인것 같다.