[문제 풀이]

  • 연산의 최소 횟수를 구해야하므로 bfs를 활용하였습니다.
  • 이때 연산된 값은 y보다 같거나 작아야하며, 거리가 구해진 적이 없어야만 갱신해주었습니다.(거리가 구해졌는지 여부와 상관 없이 값을 구하면 최소 연산 횟수를 구할 수 없습니다.)

[풀이 코드]

from collections import deque


def solution(x, y, n):
    answer = 0
    dq = deque([x])
    distance = [0 for _ in range(1000001)]

    if x == y:
        return 0
    while dq:
        val = dq.popleft()

        if 1 <= val * 2 <= y and distance[val * 2] == 0:
            distance[val * 2] = distance[val] + 1
            dq.append(val * 2)
        if 1 <= val * 3 <= y and distance[val * 3] == 0:
            distance[val * 3] = distance[val] + 1
            dq.append(val * 3)
        if 1 <= val + n <= y and distance[val + n] == 0:
            distance[val + n] = distance[val] + 1
            dq.append(val + n)

    return distance[y] if distance[y] != 0 else -1

+ Recent posts