[프로그래머스 / lv0] 옷가게 할인 받기
문제
문제 설명
머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.구매한 옷의 가격 price
가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 10 ≤
price
≤ 1,000,000price
는 10원 단위로(1의 자리가 0) 주어집니다.
- 소수점 이하를 버린 정수를 return합니다.
입출력 예
price | result |
---|---|
150,000 | 142,500 |
580,000 | 464,000 |
입출력 예 설명
입출력 예 #1
- 150,000원에서 5%를 할인한 142,500원을 return 합니다.
입출력 예 #2
- 580,000원에서 20%를 할인한 464,000원을 return 합니다.
풀이 & 걸린시간
- 걸린시간: 26m 56s
- 풀이
function solution(price) {
let total = 0;
if (price < 100000) return (total = price);
if (price >= 100000 && price < 300000)
return (total = Math.floor(price * 0.95));
if (price >= 300000 && price < 500000)
return (total = Math.floor(price * 0.9));
if (price >= 500000 && price <= 1000000)
return (total = Math.floor(price * 0.8));
return total;
}
느낀 점
문제를 읽고 난 후, if문을 사용해서 조건에 따라 구분하면 쉽게 풀 수 있을꺼라고 생각했다. 그렇지만 코드 실행해서 테스트는 통과하는데 채점에서 처음에는 정답률이 70% 두번째부터는 90%로 계속 나오는 것이었다. 정답률이 70% 나왔을때는 내가 10만원 이하를 생각하지 못해서 그렇게 나왔던거 같다 왜냐하면 나는 total을 0으로 초기 값을 잡아놓고 시작하는데 10만원 이하가 들어오면 0으로 return 되기 때문이다.
두번째부터는 계속 정답률이 90%나오는 것인데 이유를 정말 몰랐다 테스트 케이스를 여러개 추가해서 테스트를 실행해도 정상적으로 통과하는데 채점할 경우 13, 14번째에서 항상 실패라고 나왔다. 처음에 나는 total = price - (Math.floor(price * 0.05)
이런식으로 5%할인 받은 금액을 소수점 이하 버리고 원 가격에서 빼는 형식으로 작성하고 있었다. 그런데 나중에 생각해보니 원 가격에서 5%할인 받은 금액을 빼는게 아니라 그냥 처음부터 95%가격으로 하면 되지 않을까하고 생각해 값을 다 바꿔주었다.
내가 생각하기에는 소수점 이하를 버리는 과정에서 0.05와 0.95와의 차이가 있어 13, 14번째 채점 시 실패가 나지 않았나 라고 생각한다. 이번에는 시간도 많이 걸렸고 생각도 많이 했고 여러모로 답답했던 문제였지만 차근차근 하나 씩 풀어가니 답이 나왔다.