• [18512] 백준 - 점프 점프(JAVA)

    2020. 8. 31.

    by. 데롱디롱

    728x90

     

    A와 B가 이동한 횟수가 같지 않아도 된다는 것을 뒤 늦게 알아버렸다...;;

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    public class Main {
    public static void main(String[] args) throws IOException {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(bf.readLine());
    int X = Integer.parseInt(st.nextToken()); // A의 멀리뛰기 거리
    int Y = Integer.parseInt(st.nextToken()); // B의 멀리뛰기 거리
    int P1 = Integer.parseInt(st.nextToken()); // A 출발점
    int P2 = Integer.parseInt(st.nextToken()); // B 출발점
    // X와 Y중 보폭이 작은 것 먼저 넣기. (X(작음)가 Y(큼)집 앞에서 만나는 경우도 있음)
    ArrayList<int[]> list = new ArrayList<int[]>();
    if (X <= Y) {
    list.add(new int[] { X, P1 }); // X먼저 넣기
    list.add(new int[] { Y, P2 }); // Y넣기
    } else {
    list.add(new int[] { Y, P2 }); // Y먼저 넣기
    list.add(new int[] { X, P1 }); // X넣기
    }
    int cnt = 1; // 일반항 Kn = H1 + n * X
    while (true) {
    int num = list.get(0)[1] + cnt * list.get(0)[0]; // 일반항 = P(출발점) + n(cnt) * X(보폭)
    if (num >= 10000 + list.get(0)[1]) { // 출발지점에서 10000미터 이상 진행한 경우, 만날 수 없다고 판단
    System.out.println(-1); // 만날 수 없으므로 -1 출력하고
    break; // 종료
    }
    // (작은 보폭이 이동한 위치 - 큰 보폭의 시작점) % 큰 보폭의 크기 == 0이면 만날 수 있는 위치임
    num -= list.get(1)[1];
    if (num >= 0 && num % list.get(1)[0] == 0) { // 만났음
    System.out.println(num + list.get(1)[1]); // 만난 위치 출력(num에 위에서 -해준만큼 다시 더하기)
    break; // 만났으므로 종료
    } else // 못 만났으면
    cnt++; // cnt증가시켜서 한 보폭 더 가보기
    }
    }
    }
    profile
    데롱디롱

    희희.. (๑′ᴗ‵๑)

    댓글