너비 우선 탐색, 다이나믹 프로그래밍, 그래프 이론, 그래프 탐색
입력으로 양의 정수 A와 K가 주어지면, 아래 연산을 이용하여 A를 K로 변경하려고 한다. 정수 A를 변경할 때 사용할 수 있는 연산 종류는 다음과 같다.
- 연산 1: 정수 A에 1을 더한다.
- 연산 2: 정수 A에 2를 곱한다.
정수 A를 정수 K로 만들기 위해 필요한 최소 연산 횟수를 출력하자.
첫 번째 줄에 양의 정수 A와 K가 빈칸을 사이에 두고 순서대로 주어진다.
첫 번째 줄에 양의 정수 A를 양의 정수 K로 만들기 위해 필요한 최소 연산 횟수를 출력한다.
코드
1. dp로 풀기
a, k = map(int, input().split())
dp = [0]*(k+1)
for num in range(a, k):
if num+1 <= k and dp[num+1] == 0:
dp[num+1] = dp[num]+1
if num*2 <= k and dp[num*2] == 0:
dp[num*2] = dp[num]+1
print(dp[k])
2. a부터 늘려가는 것이 아닌 k를 줄여가며 a가 되는 횟수 확인
a, k = map(int, input().split())
ans = 0
while a!=k:
if k%2 == 0 and k//2 >= a: # k가 짝수이면서 나누었을시 a보다 같거나 커야한다.
k //= 2
else:
k -= 1
ans += 1
print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
[Silver II] 침투 - 13565 (python) (0) | 2024.06.24 |
---|---|
[Silver III] 도시와 비트코인 - 31575 (python) (0) | 2024.06.24 |
[Silver IV] 덱 - 10866 (python) (0) | 2024.06.23 |
[Silver V] 슈퍼 소수 - 31216 (python) (0) | 2024.06.23 |
[Silver V] 2021은 무엇이 특별할까? - 24039 (python) (0) | 2024.06.23 |