[Python] 프로그래머스(Lv2) - 삼각 달팽이

Kerri·2021년 3월 1일
0

코테

목록 보기
4/67

안녕하세요 :)

프로그래머스 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문이 끝나는 조건식울 (총 개수 = 채운 개수)로 했습니다.

문제에서 채우는 방향은 다음과 같이 세가지 입니다.

  1. 아래로 쭉 내려가기
  2. 옆으로 쭉 가기
  3. 위로 쭉 올라가기

이 과정이 반복되는 데요.
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

profile
안녕하세요 !

0개의 댓글