A small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to a position greater than or equal to Y. The small frog always jumps a fixed distance, D.
Count the minimal number of jumps that the small frog must perform to reach its target.
Write a function:
class Solution { public int solution(int X, int Y, int D); }
that, given three integers X, Y and D, returns the minimal number of jumps from position X to a position equal to or greater than Y.
For example, given:
X = 10
Y = 85
D = 30
the function should return 3, because the frog will be positioned as follows:
after the first jump, at position 10 + 30 = 40
after the second jump, at position 10 + 30 + 30 = 70
after the third jump, at position 10 + 30 + 30 + 30 = 100
Write an efficient algorithm for the following assumptions:
X, Y and D are integers within the range [1..1,000,000,000];
X ≤ Y.
몫과 나머지 연산을 아느냐는 간단한 문제로 추측되어 7분 여 정도에 (아니 codility editor 가끔 에러가 좀 많이 나는거 같다.. 이거 때문에 7분 걸림..) 쉽게 풀었다
class Solution {
public int solution(int X, int Y, int D) {
int result = Y -= X;
int share = (result / D);
int remain = (result % D);
if (remain > 0) {
share += 1;
}
return share;
}
}
수학 계산으로 올림 처리하여 풀이하신 분의 예가 인터넷에 있다.
Y-X의 결과는 Integer고, D의 경우 double로 캐스팅 하신후에 소수점 자리를 올림 처리 하신 것이다.
이 답의 핵심은
서로 다른 타입의 피연산자가 있을 경우 두 연산자 중 크기가 큰 타입으로 자동변환된 후 연산을 수행한다 라는 사실을 알고 있어야 한다는 것이다.
public int solution(int X, int Y, int D) {
return (int) Math.ceil((Y - X) / (double) D);
}