문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하입니다.
입출력 예
nresult
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] |
[ 풀이 코드 ]
import java.util.*;
class Solution {
public int[] solution(int n) {
int N = n*(n+1)/2;
int[] answer = new int[N];
int ind=1;
int [][] arr = new int[n][n];
int c = n-1;
int i = -1; // 시작점
int j = 0;
while(ind<=N&& c>0){
for(int k =0; k<c;k++){
arr[++i][j]= ind++;
}
if (ind>N) break;
i++;j--;
for(int k = 0; k<c; k++){
arr[i][++j] = ind++;
}
i++;j+=2;
for(int k = 0; k<c; k++){
arr[--i][--j] = ind++;
}
c-=3;
}
if(c==0){
arr[++i][j] = ind;
}
int ans = 0;
for(i =0; i<n; i++){
for(j =0; j< n; j++){
if(arr[i][j]!=0){
answer[ans++] = arr[i][j];
}
}
}
return answer;
}
}
진짜 진지하게 같은 level2인데 이렇게 차이나도 되나 싶다. 이 전에 푼거랑은 넘 다른데...
설명을 잘 써두면 쉽게 풀 수 있답.
1 0 0 0 0 0
2 15 0 0 0 0
3 16 14 0 0 0
4 17 21 13 0 0
5 18 19 20 21 0
6 7 8 9 10 11
이런 식으로 배열을 선언할 생각을 하고,
(0,0)->(1,0)->(2,0)->(3,0)->(4,0) (5,0)->(5,1)->(5,2)->(5,3)->(5,4) (5,5)->(4,4)->(3,3)->(2,2)->(1,1)
(2,1)->(3,1) (4,1)->(4,2) (4,3)->(3,2)
이런식으로 배열에 넣었다.
1 0 0 0 0 0
2 12 0 0 0 0
3 13 11 0 0 0
4 14 15 10 0 0
5 6 7 8 9 0
이이 것도
(0,0)->(1,0)->(2,0)->(3,0) (4,0)->(4,1)->(4,2)->(4,3) (4,4)->(3,3)->(2,2)->(1,1)
(2,1)- (3,1) (3,2)
요오런식
그리고 위에 코드를 보면 쏙쏙 이해가 쉬운 문제라고 생각한다.
효율성은 요오 정도
'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 > 2017 카카오코드 본선 ]LEVEL 3 : 리틀 프렌즈 사천성, solved by java (0) | 2020.11.04 |
---|---|
[ 프로그래머스 > 월간 코드 챌린지 시즌1 ]LEVEL 2 : 쿼드압축 후 개수 세기, solved by java (0) | 2020.10.27 |
[프로그래머스 ] level2 - 방금그곡; solved by JAVA (1) | 2020.10.24 |
[프로그래머스] Level2 - 후보키 : solved by Java (0) | 2020.10.23 |
[ 프로그래머스 ] 프로그래머스 문제로 SQL 쿼리 연습 ( mySQL ) (0) | 2020.10.08 |