안녕하세요 :)
프로그래머스 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