Lesson 3 - FrogJmp

GwanMtCat·2023년 5월 10일
0

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로 캐스팅 하신후에 소수점 자리를 올림 처리 하신 것이다.

이 답의 핵심은

서로 다른 타입의 피연산자가 있을 경우 두 연산자 중 크기가 큰 타입으로 자동변환된 후 연산을 수행한다 라는 사실을 알고 있어야 한다는 것이다.

  • 피연산자들이 모두 정수타입이고, int 타입(4byte)보다 크기가 작은 타입일 경우 모두 int 타입으로 변환 후 연산을 수행하며, 산출 타입은 int가 됨
  • 피연산자들이 모두 정수타입이고, long 타입이 있을 경우 모두 long 타입으로 변환 후, 연산을 수행하며, 산출 타입은 long이 됨.
  • 피연산자 중 실수타입(float, double)이 있을 경우, 크기가 큰 실수 타입으로 변환 후 연산을 수행하며, 연산의 산출 타입은 실수 타입이 됨.
    ex) int + double -> double + double = double
  • 즉 연산의 결과를 실수로 얻고 싶다면 피연산자 중 최소한 하나는 실수 타입이어야 한다.
    (출처 : 메리님 티스토리)
public int solution(int X, int Y, int D) {
    return (int) Math.ceil((Y - X) / (double) D);
}

0개의 댓글