일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
Tags
- react #리액트 #동빈나
- Dijkstra
- 백준
- css #웹 #생활코딩
- 재귀
- 파이썬 #백준 #알고리즘 #코딩테스트
- java #자바 #동빈나
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 백준 #알고리즘 #파이썬 #코딩테스트
- 파이썬
- dp
- 프로그래머스
- 다이나믹프로그래밍
- css #생활코딩 #웹
- 다익스트라
- java #자바 #생활코딩
- 백준 #파이썬 #알고리즘 #코딩테스트
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 알고리즘
- 코딩테스트
- 자바 #java
- 백트랙킹
- DFS
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 투포인터
- java #자바
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- PYTHON
- BFS
- java #자바 #나동빈
Archives
- Today
- Total
커리까지
[백준] 25418번 정수 a를 k로 만들기 파이썬 본문
728x90
SMALL
문제
입력으로 양의 정수 A와 K가 주어지면, 아래 연산을 이용하여 A를 K로 변경하려고 한다. 정수 A를 변경할 때 사용할 수 있는 연산 종류는 다음과 같다.
- 연산 1: 정수 A에 1을 더한다.
- 연산 2: 정수 A에 2를 곱한다.
정수 A를 정수 K로 만들기 위해 필요한 최소 연산 횟수를 출력하자.
입력
첫 번째 줄에 양의 정수 A와 K가 빈칸을 사이에 두고 순서대로 주어진다.
출력
첫 번째 줄에 양의 정수 A를 양의 정수 K로 만들기 위해 필요한 최소 연산 횟수를 출력한다.
제한
1 ≤ A < K ≤ 1,000,000
예제 입력 1
5 10
예제 출력 1
1
제출 답안
from collections import deque
import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline
a, k = map(int, input().split())
visited = [False] * (k + 1)
def bfs():
q = deque([(a, 0)])
visited[a] = True
while q:
node, cnt = q.popleft()
if node == k:
return cnt
plus = node + 1
if plus <= k:
if not visited[plus]:
visited[plus] = True
q.append((plus, cnt + 1))
double = node * 2
if double <= k:
if not visited[double]:
visited[double] = True
q.append((double, cnt + 1))
print(bfs())
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[백준] 16173번 점프왕 젤리 (Small) 파이썬 (0) | 2023.09.16 |
---|---|
[백준] 26169번 세 번 이내에 사과를 먹자 파이썬 (0) | 2023.09.15 |
[백준] 2606번 바이러스 파이썬 (0) | 2023.09.13 |
[백준] 25516번 거리가 k이하인 트리 노드에서 사과 수확하기 파이썬 (0) | 2023.09.12 |
[백준] 25416번 빠른 숫자 탐색 파이썬 (0) | 2023.09.12 |
Comments