문제
조건
정답
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;
}
}
이 코드도 정답 처리가 되었다 허허
너무 어렵게 생각하지 말자, 라고 다시 한번 생각할 수 있게 되었다
'코딩 테스트 연습 > 알고리즘' 카테고리의 다른 글
[ 코딩 테스트 ] 짝수의 합 (0) | 2024.04.29 |
---|---|
[ 코딩 테스트 ] 각도기 (0) | 2024.04.26 |
[ 코딩 테스트 ] 두 수의 합 (0) | 2024.04.26 |
[ 코딩 테스트 ] 숫자 비교하기 (0) | 2024.04.25 |
[ 코딩 테스트 ] 나이 출력 (0) | 2024.04.25 |