난이도 : D4
문제번호 : 5247
문제 주소 및 출처입니다.
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
자연수 N에 몇 번의 연산을 통해 다른 자연수 M을 만들려고 한다. 사용할 수 있는 연산이 +1, -1, *2, -10 네 가지라고 할 때 최소 몇 번의 연산을 거쳐야 하는지 알아내는 프로그램을 만드시오. 단, 연산의 중간 결과도 항상 백만 이하의 자연수여야 한다. 예를 들어 N=2, M=7인 경우, (2+1) *2 +1 = 7이므로 최소 3번의 연산이 필요한다. |
입력
첫 줄에 테스트 케이스의 개수가 주어지고, 다음 줄부터 테스트 케이스 별로 첫 줄에 N과 M이 주어진다. 1<=N, M<=1,000,000, N!=M |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다. |
예시
입력 | 출력 |
3 2 7 3 15 36 1007 |
#1 3 #2 4 #3 8 |
2. 문제풀이
특정수가 있으면 거기에 4가지 경우를 추가하여 모든 경우를 탐색했다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#D4 5247 연산
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)))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
최소 이동 거리 Python(SW Expert Academy, SWEA) (0) | 2020.06.22 |
---|---|
최소 신장 트리 Python(SW Expert Academy, SWEA) (0) | 2020.06.21 |
러시아 국기같은 깃발 Python(SW Expert Academy, SWEA) (0) | 2020.06.19 |
자기방으로 돌아가기 Python(SW Expert Academy, SWEA) (0) | 2020.06.18 |
가능한 시험 점수 Python(SW Expert Academy, SWEA) (0) | 2020.06.17 |
댓글