[Programmers] 삼각 달팽이 바로가기
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
n | result |
---|---|
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] |
입출력 예 #1
입출력 예 #2
입출력 예 #3
y
축 방향으로 1
증가하는 방식으로 진행된다.x
축 방향으로 1
증가하는 방식으로 진행된다.x
축, y
축 방향으로 각각 1
씩 증가하는 방식으로 진행된다.n
, n-1
, n-2
, ... 3
, 2
, 1
로 1씩 감소한다.triangularSnail = [[0] * (i+1) for i in range(n)]
triangularSnail
는 삼각 달팽이의 값을 저장할 그래프이다.for i in range(n, 0, -1):
if direction == 0:
for _ in range(i):
y += 1
triangularSnail[y][x] = num
num += 1
elif direction == 1:
for _ in range(i):
x += 1
triangularSnail[y][x] = num
num += 1
elif direction == 2:
for _ in range(i):
x, y = x - 1, y - 1
triangularSnail[y][x] = num
num += 1
direction = (direction + 1) % 3
direction
은 이동 방향이다.i
) 만큼 이동하면서 triangularSnail
그래프의 값을 갱신한다.direction : 0
인 경우는 그래프 기준 아래 방향으로 이동한다.y
값을 1 증가시키면서 triangularSnail
그래프의 값을 갱신한다.direction : 1
인 경우는 그래프 기준 오른쪽 방향으로 이동한다.x
값을 1 증가시키면서 triangularSnail
그래프의 값을 갱신한다.direction : 2
인 경우는 그래프 기준 왼쪽 위 방향으로 이동한다.x
, y
값을 각각 1 감소시키면서 triangularSnail
그래프의 값을 갱신한다.def solution(n):
triangularSnail = [[0] * (i+1) for i in range(n)]
x, y, num, direction = 0, -1, 1, 0
for i in range(n, 0, -1):
# 왼쪽 아래 대각선 방향
if direction == 0:
for _ in range(i):
y += 1
triangularSnail[y][x] = num
num += 1
# 오른쪽 방향
elif direction == 1:
for _ in range(i):
x += 1
triangularSnail[y][x] = num
num += 1
# 왼쪽 위 대각선 방향
elif direction == 2:
for _ in range(i):
x, y = x - 1, y - 1
triangularSnail[y][x] = num
num += 1
direction = (direction + 1) % 3
return sum(triangularSnail, [])