반응형
if문으로 범위 조건을 처리하고, 단순 할인율 연산 코드이다. 로직과 연산 코드는 잘 작성했으나 테스트 케이스 13, 14번에서 자꾸 통과하지 못했다. 헤매고 헤마다 소수점 처리 부분에서 에러가 있었다.
<에러코드>
class Solution {
public int solution(int price) {
int answer = 0;
if(price >= 100000 && price < 300000){
answer = price - (int)(price * 0.05);
}else if(price >= 300000 && price < 500000){
answer = price - (int)(price * 0.1);
}else if(price >= 500000){
answer = price - (int)(price * 0.2);
}else{
answer = price;
}
return answer;
}
}
이렇게 할인율 계산할때 소수점 처리를 먼저 하고 가격에서 뺐다. 이런 경우 int 형으로 타입캐스팅 하게 되면 단순히 소수점 아래를 잘라버리기 때문에 정확한 연산이 나오지 않을 수 있다.
<번례>
100000 -> 95000
100010 -> 95000 (잘못된 출력)
100010 -> 95009 (이렇게 출력되어야함.)
100010원일 경우 5% 할인을 받으면 5000.5원이 나온다. 이 상태에서 바로 int 타입캐스팅을 하게되면 할인가격은 5000원으로 변환되고, 결국 100010원일 경우도 95000원이 된다.
일단, 원 가격 100010의 정확한 5% 가격인 5000.5원을 빼고 그 후, 소수점을 버리는게 맞다. 계산해보자면, 100010 - 5000.5 = 95009.5원 -> int 타입캐스팅 -> 95009원이 되는 것이다.
<정답코드>
class Solution {
public int solution(int price) {
int answer = 0;
if(price >= 100000 && price < 300000){
answer = (int)(price - (price * 0.05));
}else if(price >= 300000 && price < 500000){
answer = (int)(price - (price * 0.1));
}else if(price >= 500000){
answer = (int)(price - (price * 0.2));
}else{
answer = price;
}
return answer;
}
}
결론! 소수점 처리는 연산 가장 마지막에 하자!
반응형
'알고리즘 공부' 카테고리의 다른 글
[프로그래머스] K번째수 (0) | 2024.08.17 |
---|---|
[프로그래머스] 개미군단 - JAVA (0) | 2024.08.12 |
[프로그래머스] 기능개발 - JAVA (0) | 2024.08.10 |
[프로그래머스] 분수의 덧셈 - JAVA (0) | 2024.08.09 |
[파이썬] 백준 5522 - 카드 게임 (0) | 2021.08.27 |