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

Narcoker·2023년 5월 10일
0

코딩테스트

목록 보기
98/150

문제

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

풀이

아래, 오른쪽, 왼쪽 위의 순서로 반복된다.
이 방향 백터는 deque로 관리한다.

각 순서는 n(아래), n-1(오른쪽), n-2(왼쪽 위), n-3(아래) ... 1(아래) 번 진행된다.
따라서 횟수만큼 진행되면 방향을 바꿔준다.
현재 방향은 vector[0]에 있다.
방향을 전환하려면 deque.rotate(-1) 로 구현하면 된다.

from collections import deque
from functools import reduce


def solution(n):
    answer = []
    board = [[0 for col in range(1, row + 1)] for row in range(1, n + 1)]
    num = 1
    y, x = -1, 0
    vector = deque([(1, 0), (0, 1), (-1, -1)])

    for count in range(n, 0, -1):
        for _ in range(count):
            dy, dx = vector[0]
            y = y + dy
            x = x + dx
            board[y][x] = num
            num += 1
        vector.rotate(-1)

    answer = reduce(lambda res, row: res + row, board, [])

    return answer
profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글