알고리즘/프로그래머스
[프로그래머스] 삼각달팽이
bigkwangs
2024. 5. 11. 15:54
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/68645
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🤔 문제분석
달팽이처럼 회전하면서 그래프를 그려야 하는 문제이다. 달팽이의 규칙을 분석하여 그래프를 그리면된다.
- 이동하는 순서는 아래 이동 → 오른쪽 이동 → 위로 이동 → 아래 이동 … 방식으로 이동한다.
- 이동하는량은 n이 6일때, 6 → 5 → 4 → 3 → 2 → 1 방식으로 이동한다.
위의 규칙을 기반으로 x, y 좌표계에서 생각해보면 아래의 방식으로 이동해야 원하는 그래프에 값을 채울 수 있다.
- 아래 이동 : (1, 0)
- 오른쪽 이동 : (0, 1)
- 위로 이동 : (-1, -1)
chain으로 모든 리스트를 flat 하게 만들어준다.
💻 코드
from itertools import chain
def solution(n):
move = [(1, 0), (0, 1), (-1, -1)]
def change_pos(pos):
if pos == 2:
return 0
else:
return pos + 1
temp = [[0] * (i+1) for i in range(n)]
pos = 0
y, x = 0, 0
start = 1
for i in range(n, 0, -1):
temp[y][x] = start
for _ in range(i-1):
start += 1
y, x = y + move[pos][0], x + move[pos][1]
temp[y][x] = start
pos = change_pos(pos)
y, x = y + move[pos][0], x + move[pos][1]
start += 1
return list(chain(*temp))
728x90