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

박현우·2021년 2월 16일
0

프로그래머스

목록 보기
20/34

문제

삼각 달팽이

문제 해설

이 문제에서 숫자는 각각 아래, 오른쪽, 대각선을 향해 증가하고 삼각형 하나를 그렸을 때 다시 아래로 움직이면서 증가한다. 이것이 무한히 반복되고 최종 숫자가 1~N까지의 합인 N X (N + 1) / 2 일 때 종료된다.

  • 정해진 방향을 따라 이동한다.
  • 이동한 좌표가 범위 밖이거나 이미 숫자가 있으면 방향을 바꾼다.
  • 그렇지 않다면 현재 숫자 +1의 값을 현재 좌표에 저장한다.

소스 코드

def solution(n):
    answer = []
    arr = [[0] * i for i in range(1, n + 1)]
    x, y = -1, 0  # 현재 좌표
    dx = [1, 0, -1]  # 각각 아래, 오른쪽, 대각선으로 이동
    dy = [0, 1, -1]
    direct = 0  # 방향
    now = 0  # 현재 숫자
    while now < n * (n + 1) // 2:
        nx = x + dx[direct]
        ny = y + dy[direct]
        # 끝에 도달 혹은 숫자가 있음 -> 방향 전환
        if direct == 0 and (nx >= n or arr[nx][ny] > 0):
            direct = 1
            continue
        elif direct == 1 and (ny >= n or arr[nx][ny] > 0):
            direct = 2
            continue
        elif direct == 2 and arr[nx][ny] > 0:
            direct = 0
            continue

        now += 1
        arr[nx][ny] = now
        x = nx
        y = ny
    for x in arr:
        answer.extend(x)
    return answer

0개의 댓글