본문 바로가기

코딩 테스트 연습/알고리즘

[ 코딩 테스트 ] 두 수의 나눗셈

문제

조건

 

정답

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

 

 


 

후기

 

분명 문제 자체는 쉬웠던 것 같은데 상당한 고난을 겪었다

 

문제 내용을 읽어 보면 num1 을 num2 로 나눈 값에, 1,000을 곱한 후 정수 부분을 return 하라고 되어있다

그런데 입출력 예를 자세히 보면 소수점이 존재하고 소수점의 존재 여부에 따라 결과값이 전혀 달라지게 된다

 

거기다 매개변수를 자세히 보면 int 로 되어있다

계산할 값을 int 타입으로 받아와서 그대로 계산을 하면

int num1 = 3;
int num2 = 2;
System.out.println(num1 / num2 * 1000) // 1000 출력

 

문제에서 요구한 기대값과는 전혀 다른 값이 나오게 된다❗

 

소수점을 나타내게 하기 위해

auswer 의 데이터 타입과 계산할 때의 num1 에 데이터 타입도 double 로 변환해주었다

이러면 int 타입인 num2는 크기가 더 큰 데이터 타입인 double 타입으로 따라가게 된다 !

( 제한사항의 데이터 범위가 작아서 float 타입이 훨씬 좋을 듯 하다)

 

그리고 마지막까지 방심하면 안된다

현재 데이터 타입은 double 이고 solution 함수는 int 타입을 반환하도록 되어있다

return 할 때 다시 int 로 형변환 해줘야한다

 

데이터 타입 틀리다고 에러... 기대값 틀리다고 땡... 빨간 글씨 드루와..!!!

 

겨우 문제를 다 풀었더니 다른 방법을 찾았다

문제 내용의 처리 순서와 소수점에 너무 신경 쓴 문제들을 생각하지 않고 버렸더니

처리 순서를 신경쓰지 않고 소수점 처음부터 안나오게 하는 방법...!!

심지어 형변환도 하지 않아도 된다

 

그것은 바로 1,000 을 처음부터 곱한 상태로 나누기를 해버리면 되는 거였다

애초에 * 와 / 는 연산 처리 순서가 동일하다..!! 어느 걸 먼저 해도 상관 없는 연산자들이다

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        answer = num1 * 1000 / num2;
        return answer;
    }
}

 

이 코드도 정답 처리가 되었다 허허

너무 어렵게 생각하지 말자, 라고 다시 한번 생각할 수 있게 되었다