-
[프로그래머스] 삼각 달팽이ALGORITHM/PROGRAMMERS 2021. 8. 1. 23:03
https://programmers.co.kr/learn/courses/30/lessons/68645
2021-08-01
12345678910111213141516171819202122class 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 로 나눠서 푼 사람도 있었다.
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 (0) 2021.08.02 [프로그래머스] 가장 큰 정사각형 찾기 (0) 2021.08.02 [프로그래머스] 땅따먹기 (0) 2021.08.01 [프로그래머스] 행렬의 곱셈 (0) 2021.07.30 [프로그래머스] 피보나치 수 (0) 2021.07.30