ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 13549 |
문제명 | 숨바꼭질 3 |
레벨 | 골드 5 |
분류 |
DP |
시간복잡도 | O(logn) |
인풋사이즈 | n<=100,000 |
사용한 언어 | Python |
제출기록 | 30840KB / 68ms |
최고기록 | 64ms |
해결날짜 | 2022/09/22 |
"""Solution code for "BOJ 13549. 숨바꼭질 3".
- Problem link: https://www.acmicpc.net/problem/13549
- Solution link: http://www.teferi.net/ps/problems/boj/13549
"""
def main():
N, K = [int(x) for x in input().split()]
k1, d1, k2, d2 = K, 0, K - 1, 1
answer = abs(K - N)
while k2 > 0:
if k1 % 2 == 1:
k1, d1, k2, d2 = k1 // 2 + 1, d1 + 1, k2 // 2, min(d1 + 1, d2)
else:
k1, d1, k2, d2 = k1 // 2, min(d1, d2 + 1), k2 // 2, d2 + 1
answer = min(answer, d1 + abs(N - k1), d2 + abs(N - k2))
print(answer)
if __name__ == '__main__':
main()