알고리즘/프로그래머스
[프로그래머스] 삼각 달팽이 (Python)
엉아_
2022. 2. 28. 14:14
728x90
📕 문제
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
💡 풀이법
1. 1부터 n^2까지 삼각형을 돌면서 숫자를 채워넣어야 한다.
2. 만약 n이 4라면 삼각형의 꼭대기에서 아래로 4번, 오른쪽으로 3번, 위로 2번, 아래로 1번 채워넣는다.
즉, 아래 n번 -> 오른쪽 n-1번 -> 위 n-2번 -> 아래 n-3번 -> 오른쪽 n-4번 -> .... ->1번
이런식으로 반복이 된다.
단, 위로 올라가는건 삼각형이기 때문에 열도 함께 앞으로 1씩 가야한다. 그래서 방향이 x=-1, y=-1이 된다.
dxy = [(1,0), (0,1), (-1,-1)]
def solution(n):
answer = []
matrix = [[0 for _ in range(n)] for _ in range(n)]
x, y = -1, 0
i = 1
temp = n
m = temp
while i < n*(n+1)//2+1:
if not m:
temp -= 1
m = temp
x, y = x + dxy[(n-temp)%3][0], y + dxy[(n-temp)%3][1]
matrix[x][y] = i
i += 1
m -=1
for i in range(n):
for j in range(n):
if matrix[i][j]:
answer.append(matrix[i][j])
return answer