문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 배열을 return 하도록 solution 함수를 완성해주세요.
제한 사항
- n은 1 이상 1,000 이하입니다.
입출력 예
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, n - 1, n - 2, ..... 1개씩 순서대로 채워지는 것을 확인할 수 있다.
def solution(n):
triangle_list = [[0] * i for i in range(1, n + 1)]
number = 1
flag = 0 # 왼쪽 0, 아래쪽 1, 오른쪽 2
row, col = -1, 0
for count in range(n, 0, -1):
if flag == 0:
for _ in range(count):
row += 1
triangle_list[row][col] = number
number += 1
elif flag == 1:
for _ in range(count):
col += 1
triangle_list[row][col] = number
number += 1
else:
for _ in range(count):
row -= 1
col -= 1
triangle_list[row][col] = number
number += 1
flag = (flag + 1) % 3
answer = []
for t_list in triangle_list:
answer.extend(t_list)
return answer
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] 쿼드압축 후 개수 세기 (월간 코드 챌린지 시즌1 - Level2, Python3) (0) | 2021.06.10 |
---|---|
[Programmers] 이진 변환 반복하기 (월간 코드 챌린지 시즌1 - Level2, Python3) (0) | 2021.06.10 |
[Programmers] 3진법 뒤집기 (월간 코드 챌린지 시즌1 - Level1, Python3) (0) | 2021.06.10 |
[Programmers] 두 개 뽑아서 더하기 (월간 코드 챌린지 시즌1 - Level1, Python3) (0) | 2021.06.10 |
[Programmers] 내적 (월간 코드 챌린지 시즌1 - Level1, Python3) (0) | 2021.06.10 |