Problem
You are choreographing a circus show with various animals. For one act, you are given two kangaroos on a number line ready to jump in the positive direction (i.e, toward positive infinity).
- The first kangaroo starts at location and moves at a rate of meters per jump.
- The second kangaroo starts at location and moves at a rate of meters per jump.
You have to figure out a way to get both kangaroos at the same location at the same time as part of the show. If it is possible, return YES
, otherwise return NO
.
For example, kangaroo starts at with a jump distance and kangaroo starts at with a jump distance of . After one jump, they are both at , (, ), so our answer is YES
.
Function Description
Complete the function kangaroo in the editor below. It should return YES
if they reach the same position at the same time, or NO
if they don't.
kangaroo has the following parameter(s):
- x1, v1: integers, starting position and jump distance for kangaroo 1
- x2, v2: integers, starting position and jump distance for kangaroo 2
Input Format
A single line of four space-separated integers denoting the respective values of , , , and .
Constraints
Output Format
Print YES
if they can land on the same location at the same time; otherwise, print NO
.
Note: The two kangaroos must land at the same location after making the same number of jumps.
Sample Input 0
0 3 4 2
Sample Output 0
YES
Explanation 0
The two kangaroos jump through the following sequence of locations:
From the image, it is clear that the kangaroos meet at the same location (number on the number line) after same number of jumps ( jumps), and we print YES
.
Sample Input 1
0 2 5 3
Sample Output 1
NO
Explanation 1
The second kangaroo has a starting location that is ahead (further to the right) of the first kangaroo's starting location (i.e., ). Because the second kangaroo moves at a faster rate (meaning ) and is already ahead of the first kangaroo, the first kangaroo will never be able to catch up. Thus, we print NO.
How I solved the problem
# 같은 점프 횟수로 같은 위치에 있어야함--- 공식으로 보면...
- 캥거루 1의 위치 : x1
- 캥거루 1의 점프 거리 : v1
- 캥거루 2의 위치 : x2
- 캥거루 2의 점프 거리 : v2
- 점프 횟수 : j
x1 + v1 * j = x2 + v2 * j
v1 * j - v2 * j = x2 - x1
(v1 - v2) * j = x2 - x1
j = (x2 - x1) / (v1 - v2)
로 공식을 짤 수 있음!
일단, x2가 x1보다 크거나 같으면서 v2가 v1보다 속력이 빠르거나 x2가 x1 보다 크고, v2가 v1보다 크거나 같은 경우에는 무한히 만날 수 없으므로 얘는 제외!
그리고 남은 공식은 위의 애로 짜는 데, 점프의 횟수는 소수점이 있을 수 없으니 위의 공식의 몫은 0보다 크고 나머지는 0이 되는 경우를 찾아야함!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.regex.*; public class Solution { // Complete the kangaroo function below. static String kangaroo(int x1, int v1, int x2, int v2) { String result = ""; if ((x2 > x1 && v2 >= v1) || (x2 >= x1 && v2 > v1)) { result = "NO"; return result; } int remainder = (x2 - x1) % (v1 - v2); int division = (x2 - x1) / (v1 - v2); if ((division > 0 && remainder == 0) || ((x2 == x1 && v1 == v2))) { result = "YES"; } else { result = "NO"; } return result; } private static final Scanner scanner = new Scanner(System.in); public static void main(String[] args) throws IOException { BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH"))); String[] x1V1X2V2 = scanner.nextLine().split(" "); int x1 = Integer.parseInt(x1V1X2V2[0]); int v1 = Integer.parseInt(x1V1X2V2[1]); int x2 = Integer.parseInt(x1V1X2V2[2]); int v2 = Integer.parseInt(x1V1X2V2[3]); String result = kangaroo(x1, v1, x2, v2); bufferedWriter.write(result); bufferedWriter.newLine(); bufferedWriter.close(); scanner.close(); } } | cs |
[출처 : https://www.hackerrank.com ]
'1 Day 1 Algorithms' 카테고리의 다른 글
[2019.02.01] Breaking the Records (0) | 2019.02.01 |
---|---|
[2019.01.31] Between Two Sets (0) | 2019.01.31 |
[2019.01.29] Apple and Orange (0) | 2019.01.29 |
[2019.01.28] Grading Students (0) | 2019.01.28 |
[2019.01.25] Time Conversion (0) | 2019.01.25 |
댓글