점프 킹 (Top-down)


답안 제출

Points: 9
시간 제한: 2.0s
메모리 제한: 1G

문제 유형
허용된 언어
C++

점프 킹은 수직선 위의 위치 \(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

코멘트

현재 작성된 코멘트가 없습니다.