[programmers] 옷가게 할인 받기 - JavaScript

10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20% 할인이 적용됩니다. 주어진 가격에 할인율을 적용하여 지불해야 할 금액을 반환하는 solution 함수를 작성해야 합니다. 기존 작성된 코드에서는 10만 원 이하의 경우에 대한 처리가 없어서 오류가 발생했고, 이를 수정한 코드가 제시되었습니다.
Dec 31, 2023
[programmers] 옷가게 할인 받기 - JavaScript

문제 설명

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

제한사항

  • 10 ≤ price ≤ 1,000,000
    • price는 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 합니다.

기존 작성 코드

function solution(price) { let answer; if (price >= 500000) { answer = price * 0.8; } else if (price >= 300000) { answer = price * 0.9; } else if (price >= 100000) { answer = price * 0.95; } return Math.floor(answer); }
이렇게 코드를 작성했으나 몇몇 테스트 케이스에서 런타임 오류가 발생했다. 오류가 발생한 이유는 price의 값이 10만원 이하일 경우에 넘겨지는 값이 없기 때문이었다. 이를 인지하고 다음과 같이 코드를 수정했다.

solution.js

function solution(price) { if(price>=500000){ price = price * 0.8; }else if(price>=300000){ price = price * 0.9; }else if(price>=100000){ price = price * 0.95; } return Math.floor(price); }
 

핵심 키워드

  • if 문은 조건이 참일 때 실행된다. 따라서 if 문이 여러 개일 경우 모든 조건을 검사한다.
  • if else 문은 앞의 조건이 거짓이고, 해당 조건이 참일 경우 실행된다. 즉 앞의 조건이 참인 경우 실행되지 않는다.
  • else 문은 모든 조건이 거짓일 경우 실행된다. if else 문과 같이 앞의 조건들 중 참이 있는 경우 실행되지 않는다.
  • 리턴할 값과 디폴트 케이스를 설정하지 않으면 상정하지 않은 인풋이 있을 경우 문제가 발생할 소지가 있다.
 

결론!

해당 문제를 풀면서 실행 순서, 예상하지 못한 인풋을 다루는 방법을 익힐 수 있었다.
 
Share article

👨🏻‍💻DriedPollack's Blog