[Python] 프로그래머스(Lv2) - 삼각 달팽이
안녕하세요 :)
프로그래머스 Lv.2 삼각 달팽이 문제입니다.
https://programmers.co.kr/learn/courses/30/lessons/68645
n의 수에 따라 채워야하는 갯수 점화식
a(n) = a(n-1) + n
위 식을 이용하면
n = 1 -> 총 개수 1
n = 2 -> 총 개수 3
n = 3 -> 총 개수 6
n = 4 -> 총 개수 10
.....
입니다.
그래서 while문이 끝나는 조건식울 (총 개수 = 채운 개수)로 했습니다.
문제에서 채우는 방향은 다음과 같이 세가지 입니다.
- 아래로 쭉 내려가기
- 옆으로 쭉 가기
- 위로 쭉 올라가기
이 과정이 반복되는 데요.
while 문에서 이 과정들을 반복해주었고, 저 3가지를 한 번 끝내면 열과 행을 좁혀가는 방식으로 풀었습니다.
def solution(n):
# a(n) = a(n-1) + n
cnt = 0
arr = []
for i in range(1, n + 1):
cnt += i
temp = [0] * i
arr.append(temp)
r, c = 0, 0
fill = 0
while True:
for i in range(r, n):
if fill == cnt:
break
if arr[i][c] == 0:
fill += 1
arr[i][c] = fill
for j in range(c+1, n-1):
if fill == cnt:
break
if arr[n - r -1][j-c] == 0:
fill += 1
arr[n - r - 1][j-c] = fill
for i in range(n-r-1, r-1, -1):
if fill == cnt:
break
if arr[i][i-c] == 0:
fill += 1
arr[i][i-c] = fill
if fill == cnt:
break
r += 1
c += 1
return [t for item in arr for t in item]
if break를 좀 따로 빼두고 싶네요 ....
참고)
Python flatten list 를 (2차원 리스트를 1차원 리스트로 만들기)
하는 방법은 아래 사이트를 참고해서 하시면 되겠습니다.
https://stackoverflow.com/questions/952914/how-to-make-a-flat-list-out-of-list-of-lists
Author And Source
이 문제에 관하여([Python] 프로그래머스(Lv2) - 삼각 달팽이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kerri/Python-프로그래머스Lv2-삼각-달팽이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)