
https://school.programmers.co.kr/learn/courses/30/lessons/120818
큰 금액부터 순서대로 if문을 걸어서 할인율이 적용된 금액을 리턴하면 된다.
문제는 쉽다. 그래도 이 문제를 포스팅한 이유는 깔끔한 정수형 연산을 기억하기 위해서다.
처음에는 20% 할인이니 price - (price * 0.2)로 코드를 작성했다.
하지만
price * 0.2는 double 타입이라서 int로 자동 형변환되는 과정에서 소수점 잘림 현상이 발생한다. 이 프로그래머스 문제는 정수로 정확히 떨어져야 한다.
더 나은 방법은 아래 정수형으로만 연산해서 부동소수점의 오차를 줄이는 것이다.
price * 80 / 100
(int)(price * 0.8) 방법을 사용하게 되면 부동소수점 오차가 생겨서 아래처럼 될 수 있다.
199999 * 0.8 = 159999.20000000001 // ← 부동소수점 오차
(int) → 159999
class Solution {
public int solution(int price) {
if(price >= 500000) {
return price * 80 / 100;
} else if (price >= 300000) {
return price * 90 / 100;
} else if (price >= 100000) {
return price * 95 / 100;
}
return price;
}
}