Algorithm/SWEA
[Python3] SWEA 연산 5247
앵도라지
2023. 1. 30. 19:15
문제 :
자연수 N에 몇 번의 연산을 통해 다른 자연수 M을 만들려고 한다.
사용할 수 있는 연산이 +1, -1, *2, -10 네 가지라고 할 때 최소 몇 번의 연산을 거쳐야 하는지 알아내는 프로그램을 만드시오.
단, 연산의 중간 결과도 항상 백만 이하의 자연수여야 한다.
예를 들어 N=2, M=7인 경우, (2+1) *2 +1 = 7이므로 최소 3번의 연산이 필요한다.
접근 :
bfs를 활용해 방문 체크 후 연산을 진행한다.
풀이 :
from collections import deque
def bfs(N, M):
queue = deque()
queue.append((N, 0))
check = {}
while queue:
item, count = queue.popleft()
if check.get(item, 0): continue
check[item] = 1
if item == M: return count
count += 1
if 0 < item+1 <= 1000000:
queue.append((item+1, count))
if 0 < item-1 <= 1000000:
queue.append((item-1, count))
if 0 < item*2 <= 1000000:
queue.append((item*2, count))
if 0 < item-10 <= 1000000:
queue.append((item-10, count))
for t in range(int(input())):
N,M = map(int, input().split())
print('#{} {}'.format(t+1, bfs(N,M)))