정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
4
[1,2,9,3,10,8,4,5,6,7]
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]
이 문제는 프로그래머스에서 진행한 챌린지 문제로 크게 어렵진 않았던 .
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);
}
}