ALGORITHM/PROGRAMMERS
[프로그래머스] 삼각 달팽이
0298
2021. 8. 1. 23:03
https://programmers.co.kr/learn/courses/30/lessons/68645
코딩테스트 연습 - 삼각 달팽이
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
2021-08-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Solution {
public int[] solution(int n) {
int[] answer = new int[n*(n+1)/2];
int[][] arr = new int[n][n];
int cnt = 1;
int row = -1;
int col = 0;
for(int i = n; i >= 0; i-=3) {
for(int k = 0; k < i; k++) arr[++row][col] = cnt++;
for(int k = 0; k < i-1; k++) arr[row][++col] = cnt++;
for(int k = 0; k < i-2; k++) arr[--row][--col] = cnt++;
}
int idx = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(arr[i][j] != 0) answer[idx++] = arr[i][j];
return answer;
}
}
|
cs |
#문제풀이
삼각형으로 되어 있는 부분을 한쪽으로 미뤄서 직각삼각형으로 만들어서 보게 되면,
크게 아래로 내려가는 부분, 오른쪽으로 가는 부분, 대각선 위쪽으로 올라가는 부분 세가지로 나눌 수 있다.
처음에 내려가는 부분은 n만큼 이동한다. 오른쪽으로 가는 부분은 n-1만큼 이동하고, 대각선 위쪽은 n-2만큼 이동한다.
그리고 한 바퀴를 돌고나면 그 기준 n은 -3만큼 줄어들게 된다.
+) 특이? 하게 풀었다고 해야하나 프로그래머스 다른 사람 풀이에서 아래, 오른쪽, 위를 i%3 == 0, 1, 2 로 나눠서 푼 사람도 있었다.