점프 킹 (Top-down)
점프 킹은 수직선 위의 위치 \(A\)에 있으며, 위치 \(B\)까지 이동하려고 한다.
점프 킹에게는 서로 다른 세 가지 점프 능력이 있다. 세 능력으로 한 번에 이동하는 거리는 각각 \(X\), \(Y\), \(Z\)이다.
점프 킹은 1초마다 세 능력 중 하나를 선택하여 그 능력의 거리만큼 위치가 증가하는 방향으로 이동한다. 같은 능력을 여러 번 사용할 수 있지만, 한 번의 점프로 목표 위치 \(B\)를 지나칠 수는 없다.
점프 킹이 위치 \(B\)에 정확히 도착하는 데 필요한 최소 시간을 구하여 반환하는 함수 f를 Top-down 방식으로 작성하시오. 정확히 도착할 수 없다면 -1을 반환한다.
미리 작성된 코드
아래 코드의 전역 변수와 main 함수 사이의 빈 부분에 f 함수의 정의 전체를 작성한다.
#include <stdio.h>
int a, b;
int arr[3];
int dt[10001];
/* 코드를 작성하세요. */
int main() {
scanf("%d %d", &a, &b);
scanf("%d %d %d", &arr[0], &arr[1], &arr[2]);
printf("%d\n", f(b));
return 0;
}
제출할 때는 완성한 f 함수의 정의 전체만 제출한다. 그 밖의 코드는 제출하지 않는다.
입력
첫째 줄에 점프 킹의 현재 위치 \(A\)와 목표 위치 \(B\)가 공백으로 구분되어 주어진다.
둘째 줄에 세 점프 능력의 이동 거리 \(X\), \(Y\), \(Z\)가 공백으로 구분되어 주어진다.
출력
미리 작성된 main 함수가 f의 반환값을 출력한다.
제한 사항
- \(1 \le A \le B \le 10,000\)
- \(1 \le X,Y,Z \le 500\)
- \(X\), \(Y\), \(Z\)는 서로 다르다.
예제 입력 1
1 15
2 5 7
예제 출력 1
2
예제 설명 1
거리 \(7\)만큼 이동하는 능력을 두 번 사용하면 위치 \(1\)에서 \(15\)까지 2초 만에 이동할 수 있다.
예제 입력 2
3 10
2 4 6
예제 출력 2
-1
예제 설명 2
세 능력으로는 거리 \(7\)을 정확히 이동할 수 없으므로 -1을 출력한다.
예제 입력 3
500 500
7 13 29
예제 출력 3
0
코멘트