프로그래머스.옷가게 할인 받기

남궁진 (jinvicky)·2026년 4월 1일

Problem


https://school.programmers.co.kr/learn/courses/30/lessons/120818

Solution


큰 금액부터 순서대로 if문을 걸어서 할인율이 적용된 금액을 리턴하면 된다.
문제는 쉽다. 그래도 이 문제를 포스팅한 이유는 깔끔한 정수형 연산을 기억하기 위해서다.

Bad

처음에는 20% 할인이니 price - (price * 0.2)로 코드를 작성했다.

하지만 price * 0.2는 double 타입이라서 int로 자동 형변환되는 과정에서 소수점 잘림 현상이 발생한다. 이 프로그래머스 문제는 정수로 정확히 떨어져야 한다.

Better

더 나은 방법은 아래 정수형으로만 연산해서 부동소수점의 오차를 줄이는 것이다.

price * 80 / 100

(int)(price * 0.8) 방법을 사용하게 되면 부동소수점 오차가 생겨서 아래처럼 될 수 있다.

199999 * 0.8 = 159999.20000000001 // ← 부동소수점 오차
(int) → 159999

Code


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;
    }
}
profile
문제를 차근차근 하나씩 해결하려고 합니다:)

0개의 댓글