정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
우선 저렇게 피라미드형 모양 말고 그냥 일반적인 2차원 리스트로 생각해서 푼다.
하나의 큰 과정을 다음과 같이 정의하였다.
cnt
라는 변수를 일단 n
으로 초기화하고 cnt
가 0이 될 때까지 다음 과정을 반복한다.
각 과정은 cnt
만큼 수행한다.
cnt = 4
1. 1 2 3 4와 같이 세로로 쭉 내리는 과정 => cnt -= 1
2. 5 6 7과 같이 가로로 쭉 적는 과정 => cnt -= 1
3. 8 9와 같이 대각선 왼쪽 위로 쭉 적는 과정 => cnt -= 1
이렇게 1 2 3번을 while(cnt > 0) 조건 하에 계속 돌려준다.
def solution(n):
board = [[0] * n for _ in range(n)]
cnt = n
num = 1
row, col = 0, 0
while(cnt > 0):
#1) cnt번만큼 현재 row에서 밑으로 쭉 내려간다.
for i in range(cnt):
board[row][col] = num
num += 1
if i != (cnt-1):
row += 1
cnt -= 1
col += 1
#2) cnt번만큼 현재 col에서 오른쪽으로 쭉 밀고나간다.
for i in range(cnt):
board[row][col] = num
num += 1
if i != (cnt-1):
col += 1
cnt -= 1
col -= 1
row -= 1
#3) cnt번만큼 현재 row, col에서 대각선 왼쪽위로 쭉 밀고나간다.
for i in range(cnt):
board[row][col] = num
num += 1
if i != (cnt-1):
row -= 1
col -= 1
row += 1
cnt -= 1
answer = []
for i in range(n):
for j in range(i+1):
answer.append(board[i][j])
return answer