[Silver II] Title: A → B, Time: 92 ms, Memory: 41388 KB -BaekjoonHub

This commit is contained in:
SSUM
2025-03-01 22:02:20 +09:00
parent 53fe72285e
commit fd56e79857
2 changed files with 67 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
import sys
from collections import defaultdict
import math
from collections import deque
input = sys.stdin.readline
a, b = map(int, input().split())
case = 0
def BFS(start, end):
queue = deque([(start, 1)])
visited = set([start])
while queue:
k, chance = queue.popleft()
if k == end:
return chance
temp1 = int(str(k) + '1') # 1을 추가한 값
temp2 = k * 2 # 2를 곱한 값
# 두 가지 연산을 수행하고 큐에 추가 (범위 초과 방지)
if temp1 <= end and temp1 not in visited:
visited.add(temp1)
queue.append((temp1, chance + 1))
if temp2 <= end and temp2 not in visited:
visited.add(temp2)
queue.append((temp2, chance + 1))
return -1 # 만들 수 없는 경우
print(BFS(a,b))

View File

@@ -0,0 +1,35 @@
# [Silver II] A → B - 16953
[문제 링크](https://www.acmicpc.net/problem/16953)
### 성능 요약
메모리: 41388 KB, 시간: 92 ms
### 분류
너비 우선 탐색, 그래프 이론, 그래프 탐색, 그리디 알고리즘
### 제출 일자
2025년 3월 1일 22:02:10
### 문제 설명
<p>정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.</p>
<ul>
<li>2를 곱한다.</li>
<li>1을 수의 가장 오른쪽에 추가한다. </li>
</ul>
<p>A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.</p>
### 입력
<p>첫째 줄에 A, B (1 ≤ A < B ≤ 10<sup>9</sup>)가 주어진다.</p>
### 출력
<p>A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.</p>