프로그래밍-학습기록/코딩테스트

프로그래머스 | 파이썬 | 삼각달팽이

leesche 2020. 12. 29. 17:47

코딩테스트 연습 - 삼각 달팽이

  • 엄청 어려웠다. 결국 다른 사람 풀이를 참조했다.
  • DFS/BFS 유형의 문제 같다.
  • 풀이의 흐름
    • 방향에 따른 좌표 값의 증감을 미리 정해둔다.
    • 같은 방향으로 진행하면서 값을 넣어주고 범위를 벗어나려고 하면 방향을 바꾼다. 방향을 바꿀 때 방향을 그것을 3으로 나눈 나머지로 한다.
    • 정해진 숫자만큼 칸을 다 채웠으면 리스트에 담는다.
def solution(n):
    dx = [1, 0, -1]  # 세로
    dy = [0, 1, -1]  # 가로
    board = [[0] * (n) for _ in range(n)]

    count = 1  # 채울 숫자
    x, y = 0, 0
    direction = 0
    end_count = (n * (n + 1)) / 2
    while end_count >= count:
        if (0 <= x < n) and (0 <= y < n) and (board[x][y] == 0):
            board[x][y] = count
            count += 1
        else:
            x -= dx[direction]
            y -= dy[direction]
            direction = (direction + 1) % 3
        x += dx[direction]
        y += dy[direction]

    answer = []
    for x in range(n):
        for y in range(0, x + 1):
            answer.append(board[x][y])
    return answer