5247. [파이썬 S/W 문제해결 구현] 6일차 - 연산
풀이
class Node:
def __init__(self, item, rank):
self.item = item
self.rank = rank
self.next = None
class Queue:
def __init__(self):
self.front = None
self.rear = None
def enQueue(self, item, rank):
new = Node(item, rank)
if self.front == None:
self.front = new
self.rear = new
else:
self.rear.next = new
self.rear = new
def deQueue(self):
cur = self.front
self.front = self.front.next
if self.front == None:
self.rear = None
return cur.item, cur.rank
def isEmpty(self):
if self.front == None:
return True
return False
def isFull(self):
return False
def Qpeek(self):
return self.front.item, self.front.rank
T = int(input())
answer = []
for tc in range(1, T + 1):
N, M = map(int, input().split())
q = Queue()
visited = set()
q.enQueue(N, 0)
rank = 0
while True:
v, rank = q.deQueue()
if v == M:
break
if v not in visited:
visited.add(v)
if 0 < v + 1 <= 1000000:
q.enQueue(v + 1, rank+1)
if 0 < v - 1 <= 1000000:
q.enQueue(v - 1, rank+1)
if 0 < v * 2 <= 1000000:
q.enQueue(v * 2, rank+1)
if 0 < v - 10 <= 1000000:
q.enQueue(v - 10, rank+1)
result = rank
answer.append(result)
for tc in range(1, T+1):
print(f'#{tc} {answer[tc-1]}')