점프 킹 (Bottom-up)


답안 제출

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

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

점프 킹은 수직선 위의 위치 \(A\)에 있으며, 위치 \(B\)까지 이동하려고 한다.

점프 킹에게는 서로 다른 세 가지 점프 능력이 있다. 세 능력으로 한 번에 이동하는 거리는 각각 \(X\), \(Y\), \(Z\)이다.

점프 킹은 1초마다 세 능력 중 하나를 선택하여 그 능력의 거리만큼 위치가 증가하는 방향으로 이동한다. 같은 능력을 여러 번 사용할 수 있지만, 한 번의 점프로 목표 위치 \(B\)를 지나칠 수는 없다.

점프 킹이 위치 \(B\)에 정확히 도착하는 데 필요한 최소 시간을 Bottom-up 방식으로 구하시오. 정확히 도착할 수 없다면 -1을 출력한다.

미리 작성된 코드

아래 코드에서 주석으로 표시된 부분에 코드를 작성한다.

#include <stdio.h>

int main() {
    int a, b;
    int arr[3];
    int dt[10001];

    scanf("%d %d", &a, &b);
    scanf("%d %d %d", &arr[0], &arr[1], &arr[2]);

    /* 코드를 작성하세요. */

    if (dt[b] == 999999) printf("-1");
    else printf("%d", dt[b]);
}

제출할 때는 입력 이후에 들어갈 Bottom-up 계산 코드만 제출한다. 헤더, main 함수의 시작 부분, 입력 코드, 출력 코드와 마지막 닫는 중괄호는 제출하지 않는다.

입력

첫째 줄에 점프 킹의 현재 위치 \(A\)와 목표 위치 \(B\)가 공백으로 구분되어 주어진다.

둘째 줄에 세 점프 능력의 이동 거리 \(X\), \(Y\), \(Z\)가 공백으로 구분되어 주어진다.

출력

미리 작성된 출력 코드는 dt[b]999999이면 -1을 출력하고, 그렇지 않으면 dt[b]의 값을 출력한다.

위치 \(B\)에 도달할 수 있다면 dt[b]에 필요한 최소 시간을 저장하고, 도달할 수 없다면 dt[b]의 값을 999999로 유지해야 한다.

제한 사항

  • \(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

코멘트

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