[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