본문 바로가기

알고리즘(algorithm)/프로그래머스

프로그래머스) 숫자 변환하기 python

from collections import deque
def solution(x, y, n):
    answer = 0
    dp = [0 for _ in range(1000001)]
    # 범위 안을 확인하기위해 주어진 범위 크기의 리스트를 만들어줍니다.
    dp[x] = 1
    # x의 위치를 1로 만들어줍니다.

    q = deque()
    q.append((x, 1))
    # q에 x와 비용을 튜플로 묶어 넣어줍니다.
    while q:
        num, cnt = q.popleft()
        # q에서 가장 앞의 값을 확인해서 num과 cnt로 이름 붙여줍니다.
        if num == y:
            break
        # q에서 뺀 num이 y라면 원하는 값에 도착하였으므로 확인을 멈추어줍니다.
        if num + n <= 1000000 and dp[num + n] == 0:
            dp[num + n] = dp[num] + 1
            q.append((num + n, cnt + 1))
        if num * 2 <= 1000000 and dp[num * 2] == 0:
            dp[num * 2] = dp[num] + 1
            q.append((num * 2, cnt + 1))
        if num * 3 <= 1000000 and dp[num * 3] == 0:
            dp[num * 3] = dp[num] + 1
            q.append((num * 3, cnt + 1))
        # 주어진 세 조건으로 연산하여 범위안에 있고 방문한 적 없는지 확인해줍니다.
    if dp[y]:
        answer = dp[y] - 1
        # y에 도달하였다면 x에 도달하는 비용을 1로 시작하였기 때문에 y에 위치한 값에서
        # 1을 뺀 값을 출력해주고
    else:
        answer = -1
        # 도달하지 못하였다면 -1로 만들어 도달하지 못했음을 표시해줍니다.
    return answer
    # 결과를 출력해줍니다.