본문 바로가기
코딩테스트 공부/프로그래머스

[Coding Test : Java] Lv.0 : 두 수의 나눗셈

by 규글 2023. 3. 14.

문제 상황은 다음과 같다. [각주:1]


 정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.


 필자는 아직까지도 수학적인 순서로 연산하는 것이 익숙한지 num1과 num2를 나누어서 해결할 생각을 가장 먼저 했다. 문제는 int type으로 주어진 num1과 num2를 나누어 그 값을 double type으로 받고 1000을 곱했을 때, 소수점 이하를 탈락시키는 방법을 새롭게 생각해야만 했다.

 

 Java에는 Math라는 친구가 있는데, 이 친구의 method인 'floor( )' 를 활용하면 소수점 이하를 쉽게 버릴 수 있다. 하지만 이렇게 작업하는 경우 test case 각각의 수행 시간이 0.2 ~ 0.3ms 가량으로 나오며, double type variable 까지 활용해야 해서 조금은 번거로울 수 있다.

 

 하지만 method를 쓰지 않고 연산의 순서를 바꾸는 방식으로 해결한다면 더 좋겠다는 생각이 문득 들었다. 어차피 나눗셈과 곱셈인데, 만약 이들이 모두 double type이었다면 실제 연산의 순서를 바꾼다고 그 연산의 결과가 달라지지는 않는다. 따라서 오히려 int type으로 주어진 test case의 값을 생각해보면 num1에 1000을 우선 곱하고 이를 num2로 나눈다면, 자연스럽게 소수점 이하가 버려지고 원하는 결과를 얻어낼 수 있다. 게다가 test case 각각의 수행 시간은 0.01 ~ 0.03ms 가량으로 나와서 속도 또한 아주 빠른 것을 확인했다.

 

 

코드

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        answer = num1*1000/num2;
        // double test = Math.floor((num1*1.0/num2)*1000);
        return answer;
    }
}

 

Footnote

댓글