티스토리 뷰
📍 문제 탐색하기
양의 정수 A에서 로 변경하는 최소 연산 횟수를 구하는 문제입니다.
사용할 수 있는 연산은 다음 두 가지입니다:
- 연산 1: 현재 수에 1을 더한다. → A=A+1
- 연산 2: 현재 수에 2를 곱한다. → A=A×2
목표:
정수 A에서 시작하여 로 만들기 위한 최소 연산 횟수를 출력한다.
문제 조건
- 1≤A<K≤1,000,000
- 최소 연산 횟수를 찾기 위해 최적의 경로 탐색이 필요함.
- 연산이 빠르게 수행되도록 효율적인 방법 필요.
가능 시간 복잡도
- 완전 탐색(브루트포스): O(2^N) → 시간 초과 가능성.
- BFS(너비 우선 탐색): O(N) → 최적해 보장.
- 역방향 탐색(탑다운 방식): O(logN) → 효율적인 방식.
📍 코드 설계하기
이 문제를 해결하기 위해 탑다운 방식(역방향 탐색)을 적용했다.
K에서 로 거꾸로 접근하여 연산 횟수를 줄이는 전략을 선택했다.
알고리즘 아이디어
- K가 A보다 크면 반복:
- K가 짝수이면 2로 나눔.
- K가 홀수이면 1을 빼서 짝수로 만듦.
- 연산 횟수 증가.
- A와 같아지면 종료.
📍 코드 구현
import sys
input = sys.stdin.readline
A, K = map(int, input().split())
cnt = 0
while K > A:
if K % 2 == 0:
if K // 2 < A:
K = K - 1
else :
K = K // 2
else:
K = K -1
cnt += 1
print(cnt)
'알고리즘' 카테고리의 다른 글
[알고리즘] 백준 파이썬 2564 경비원 (0) | 2025.01.24 |
---|---|
[알고리즘] 백준 파이썬 13702 이상한 술집 (0) | 2025.01.23 |
[알고리즘] 백준 파이썬 2467 용액 (0) | 2025.01.21 |
[알고리즘] 백준 파이썬 2805 나무 자르기 (0) | 2025.01.20 |
[알고리즘] 백준 파이썬 11663 선분 위의 점 (0) | 2025.01.19 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- 다이나믹 프로그래밍
- 지연로딩
- SQL
- JPA
- 웹 MVC
- 회원탈퇴
- 자바 스프링
- 스프링 북마크
- 스프링 커뮤니티
- 로깅
- 스프링
- elasticsearch
- 준영속
- 인텔리제이
- 백준
- 파이썬
- 커뮤니티
- 웹MVC
- 자바
- 비영속
- SQLD
- 북마크
- 스프링부트
- 프론트엔드
- 백준 파이썬
- EnumType.ORDINAL
- 로그아웃
- SQL 레벨업
- 영속
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
글 보관함