정수 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] |
n=6인 경우의 예시입니다.
처음 포인터를 (0, 0)에서 시작해서 (1, 0), ..., (5, 0)까지 증가시켜 줍니다. 그 다음에는 (5, 1), (5, 2), ... (5, 5)로 포인터를 이동시켜줍니다. 이렇게 세로, 가로, 대각선으로 포인터를 이동해 주면서 2차원 배열을 만들어 주면 됩니다.
가만 보면 한번에 찍히는 숫자 개수가 n개, n-1개, ..., 1개 이렇게 줄어듭니다. 이렇게 한 번에 찍히는 숫자 개수가 0보다 클 때까지 세로, 가로, 대각선으로 찍는 행위를 반복하면 됩니다.
def solution(n):
answer = []
triangle = [[0 for _ in range(n)] for _ in range(n)]
i, j = -1, 0
m = n
num = 1
while m > 0 :
i += 1
# 세로
for _ in range(m) :
triangle[i][j] = num
i += 1
num += 1
m -= 1
if m == 0 :
break
i -= 1
j += 1
# 가로
for _ in range(m) :
triangle[i][j] = num
num += 1
j += 1
m -= 1
j -= 1
if m == 0 :
break
i -= 1
j -= 1
# 대각선
for _ in range(m) :
triangle[i][j] = num
num += 1
i -= 1
j -= 1
i += 1
j += 1
m -= 1
# flattening
for i in range(n) :
answer.extend(triangle[i][:i+1])
return answer
의문이 드는 점, 개선해야할 점은 댓글로 남겨주세요.
감사합니다 😽