알고리즘/프로그래머스
[프로그래머스 Lv2] 삼각 달팽이(Java)
justkeepgoing
2021. 1. 6. 14:31
728x90
반응형
1. 문제
programmers.co.kr/learn/courses/30/lessons/68645?language=java
코딩테스트 연습 - 삼각 달팽이
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]
programmers.co.kr
2. 풀이
- 배열문제, 별찍기가 생각났다.
3. 코드
class Solution {
public int[] solution(int n) {
int max = getMax(n);
int[] answer = new int[max];
int[][] arr = new int[n][n];
for(int i =0; i<n; i++){
for(int j =0; j<=i; j++){
arr[i][j] = 0;
}
}
int r=0, c=0, k=1;
arr[r][c] = k;
while(k<max){
while(r+1<n && arr[r+1][c]==0){
arr[++r][c] = ++k;
}
while(c+1<n && arr[r][c+1]==0){
arr[r][++c] = ++k;
}
while (r-1>0 && c-1>0 && arr[r-1][c-1]==0){
arr[--r][--c] = ++k;
}
}
int idx=0;
for(int i =0; i<n; i++){
for(int j =0; j<=i; j++){
answer[idx++] = arr[i][j];
}
}
return answer;
}
static int getMax(int n){
if(n==1) return 1;
return getMax(n-1)+n;
}
}
반응형
반응형