문제 설명
머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다. 구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
제한사항
10 ≤ price ≤ 1,000,000 price는 10원 단위로(1의 자리가 0) 주어집니다. 소수점 이하를 버린 정수를 return합니다.
풀이
주어진 값을 조건에 따라 할인하고 그 값을 리턴해주면 되는것 같다.
삼항 연산자 사용
const solution = (price) =>
price >= 500000 // 50만원 이상일 때
? Math.trunc(price * 0.8) // 원 가격의 80% (20% 할인)
: price >= 300000 // 30만원 이상일 때
? Math.trunc(price * 0.9) // 원 가격의 90% (10% 할인)
: price >= 100000 // 10만원 이상일 때
? Math.trunc(price * 0.95) // 원 가격의 95% (5% 할인)
: price; // 10만원 미만일때 할인 없음
삼항 연산자 미사용1 (if문 사용)
const solution = (price) => {
if(price >= 500000){ // 50만원 이상일 때
return Math.trunc(price * 0.8); // 원 가격의 80% (20% 할인)
}else if(price >= 300000){ // 30만원 이상일 때
return Math.trunc(price * 0.9); // 원 가격의 90% (10% 할인)
}else if(price >= 100000){ // 10만원 이상일 때
return Math.trunc(price * 0.95) // 원 가격의 95% (5% 할인)
}else{
return price; // 10만원 미만일때 할인 없음
}
}
삼항 연산자 미사용2 (if문 중괄호 미사용)
const solution = (price) => {
if(price >= 500000) return Math.trunc(price * 0.8);
else if(price >= 300000) return Math.trunc(price * 0.9);
else if(price >= 100000) return Math.trunc(price * 0.95);
else return price;
}
스위치문 사용
const solution = (price) => {
switch (true) {
case price >= 500000: return Math.trunc(price * 0.8);
case price >= 300000: return Math.trunc(price * 0.9);
case price >= 100000: return Math.trunc(price * 0.95);
default: return price;
}
};
딱히 주의 할 점은 없고 코드 작성에 대해서 4가지 케이스를 써보았다.
나는 삼항연산자를 주로 쓰는편인데, 개인 판단으로 가독성이 높다고 생각되는 쪽으로 사용하면 될듯.
if문 같은경우엔 수식이 짧은데 반해 매번 return 을 해줘야 해서 좀 그르타.
참고로 스위치문은 조건과 일치하는 블럭에서 실행이 일어나기 때문에
조건에 비교연산자를 사용 할 수 없다.
** 참고
switch 문의 case 절에는 일반적으로 비교 연산자를 직접 사용할 수 없다.
case 절에는 단순한 값이나 상수만이 올 수 있으며, 비교 연산자를 직접 사용할 수 없는 제약이 있다.
하지만 JavaScript에서는 switch 문에 true를 전달하여 조건에 따라 분기할 수 있다.
이를 이용하여 조건을 확인하고 case 절에 true 또는 false 값을 사용하여 코드를 작성할 수 있다.
이 방식은 특정 상황에서는 유용할 수 있지만, 코드의 가독성과 유지 보수성을 고려할 때는
if-else 문을 사용하는 것이 좋다.
이상, 이하, 초과, 미만에 대한 부등호만 신경 잘 써주면 될꺼 같고
소수점을 버리는 Math.trunc()를 활용했다.
Math.floor 혹은 parseInt 등을 사용할 수도 있을것 같다.
단 parseInt 의 경우 숫자가 굉장히 큰 경우엔 제대로 동작하지 않는다.
그리고 Math.floor은 내림이기 때문에, -5.4 등과 같은 음수 값이 나올때
-6이 되버리므로 제한사항을 잘 확인하고 주어지는 값이 양수인 경우에만 사용하자.