[프로그래머스] 삼각 달팽이

HL·2021년 2월 4일
0

프로그래머스

목록 보기
4/44

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/68645

문제 설명

  • 삼각형 배열에 1부터 차례로 달팽이 채우기
  • 모두 마친 후 1차원 배열로 리턴

풀이

  • 삼각형 리스트를 만든다
  • 각 방향마다 0이 아닌 수를 만나거나 리스트를 벗어날 때까지 값을 채운다
  • 합쳐서 리턴

느낀 점

  • 예전에 JS로 풀었던 문제였다
  • 근데 여전히 오래 걸렸다

코드

num = 2
pos = [0, 0]
dy = [1, 0, -1]
dx = [0, 1, -1]
gn = 0
board = []


def solution(n):
    global board, gn
    gn = n
    board = [[0] * i for i in range(1, n+1)]
    board[0][0] = 1
    goal = sum(map(len, board))
    
    while num <= goal:
        for d in range(3):
            move(d)
            if num > goal:
                break
    return sum(board, [])


def move(d):
    global num, pos
    while True:
        cy, cx = pos
        ny = cy + dy[d]
        nx = cx + dx[d]
        if 0 <= ny < gn and 0 <= nx < len(board[ny]):
            if board[ny][nx] == 0:
                pos = [ny, nx]
                board[ny][nx] = num
                num += 1
                continue
        break
profile
Swift, iOS 앱 개발을 공부하고 있습니다

0개의 댓글