시간을 달려서 (Rough)
시간 제한1초메모리 제한1024 MB
G와 F가 주어질 때, 0에서 시작해 +1 또는 두 배로 이동하여 G에 도달하는 최소 이동 횟수를 구합니다. F 이상이 된 시각은 F로 나눈 나머지로 바뀝니다.
문제
미처 말하지 못했어
다만 너를 좋아했어
어린 날의 꿈처럼 마치 기적처럼
시간을 달려서 어른이 될 수만 있다면
거친 세상 속에서 손을 잡아줄게
나는 시간을 달려서 너를 만나고자 한다.
나와 네가 있는 세계에서 시간은 음이 아닌 정수로 나타낼 수 있다.
처음에 나는 시간 에 있고, 너는 시간 에 있다.
시간 에 있는 나는 시간을 달려 두 가지 방법으로 이동할 수 있다.
- 로 이동한다
- 로 이동한다
내 시간은 특이한 구조로 되어 있어서, 이동한 뒤 내 시간이 이상이면 시간으로 이동한다. 여기서 는 를 로 나눈 나머지다.
시간 속에서 길을 헤매지 않도록, 너의 시간에 도착하기 위해 시간을 달려 이동하는 횟수의 최솟값을 구하여라.
입력
첫째 줄에 양의 정수 가 주어진다.
출력
첫째 줄에 시간을 달려 이동하는 횟수의 최솟값을 출력하라.
제한
힌트
입력이 C/C++의 int 범위를 넘어갈 수 있으므로 long long 자료형을 사용하는 것을 추천한다.