-
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증가시켜서 한 보폭 더 가보기 } } }
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[14891] 백준 - 톱니바퀴(JAVA) (0) 2021.03.14 [18868] 백준 - 멀티버스1(JAVA) (0) 2020.08.31 [10814] 백준 - 나이순 정렬(C++) (0) 2020.04.30 [2108] 백준 : 통계학(C++) (0) 2020.04.30 [1436] 백준 : 영화감독 숌(C++) (0) 2020.04.27 댓글