A
, K
: 변경하려는 수, 원하는 수
A를 K로 변경할 때 사용한 연산의 최소 횟수를 구하는 문제이다.
처음의 풀이 방식
수정한 풀이 방식
홀수 연산 →
짝수 연산 →
최종 시간복잡도
로 최악의 경우 가 되는데 이는 1초 내에 연산 가능하다.
조건에 따라 연산 반복하기
while True:
# K가 A가 될 때까지 연산 반복
if K == A:
break
else:
# 짝수면 2 나누기
if K % 2 == 0:
K //= 2
# 연산 횟수 세기
count += 1
# 홀수이면 1 빼기
else:
K -= 1
# 연산 횟수 세기
count += 1
import sys
input = sys.stdin.readline
# A, K 입력
A, K = map(int, input().split())
# 연산 횟수 변수 정의
count = 0
while True:
# K가 A가 될 때까지 연산 반복
if K == A:
break
else:
# 짝수면 2 나누기 (반드시 K를 A로 만들 수 있도록 조건 추가)
if K % 2 == 0 and K // 2 >= A:
K //= 2
# 연산 횟수 세기
count += 1
# 홀수이면 1 빼기
else:
K -= 1
# 연산 횟수 세기
count += 1
# 결과 출력
print(count)