몸과 마음이 건전한 SW 개발자

프로그래머스 Lv. 2 삼각 달팽이 Python 본문

알고리즘

프로그래머스 Lv. 2 삼각 달팽이 Python

스위태니 2024. 1. 3. 22:29

문제 링크

https://school.programmers.co.kr/tryouts/72049/challenges

정답 코드

def solution(n):
    top = [[0 for _ in range(n)] for _ in range(n)]
    number = 1
    cnt = n
    ifd = [0, 1, 2]
    direction = 0
    startIndex = 0
    endIndex = n
    # index 증가, 고정, 감소, 증가, 고정, 감소
    while cnt:
        cnt -= 1
        d = ifd[direction]
        if d == 0:
            for idx in range(startIndex, endIndex):
                top[idx][startIndex] = number
                number += 1
            startIndex += 1
        elif d == 1:
            for jdx in range(startIndex, endIndex):
                top[endIndex-1][jdx] = number
                number += 1
            endIndex -= 1
        else:
            for idx in range(endIndex-1, startIndex-1, -1):
                top[idx][endIndex] = number
                number += 1
            startIndex += 1
        direction = (direction + 1) % 3
    answer = []
    for idx in range(n):
        for jdx in range(n):
            number = top[idx][jdx]
            if number:
                answer.append(number)
    return answer

 

풀이 방법

- dp로 풀 수도 있지만 그러려면 조금 더 설계를 해야 하고 오래 생각해야 했기에 While문으로 접근했다.

- 단순하게 왼쪽은 아래로 내려가면서 top 리스트에 넣는다. 

    - 다 내려가면 startIndex를 + 1

- 다음은 하단, columnIndex를 늘려가면서 

느낀점

- 그다지 어렵지는 않았다.