[프로그래머스 / lv0] 옷가게 할인 받기

[프로그래머스 / lv0] 옷가게 할인 받기

문제


문제 설명


머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.

제한사항


  • 10 ≤ price ≤ 1,000,000
    • price는 10원 단위로(1의 자리가 0) 주어집니다.
  • 소수점 이하를 버린 정수를 return합니다.

입출력 예


priceresult
150,000142,500
580,000464,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번째 채점 시 실패가 나지 않았나 라고 생각한다. 이번에는 시간도 많이 걸렸고 생각도 많이 했고 여러모로 답답했던 문제였지만 차근차근 하나 씩 풀어가니 답이 나왔다.


© 2024. All right reserved Min