머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
제한 사항
입출력 예
price | result |
---|---|
150,000 | 142,500 |
580,000 | 464,000 |
할인율 기준이 3개뿐이여서 if 문을 써도 나쁘지 않다고 판단했다.
하지만 테스트 2개가 통과가 안되었고 🥲
우선 15만원일 때와 , 38만원일 때는 테스트가 확실하게 통과됐으니
if (price >= 100000 && price < 300000) {
return price*0.95;
}
else if (price >= 500000) {
return price*0.8;
두 조건문은 문제가 없어보인다.
확실하지 않지만 일단 남은 두 조건문에 오류가 있는지 살펴봤고, 첫 else-if 문은 if 문에 이어진 코드라 문제가 없을 것으로 예상한다. 그래서 else 문을 고쳐보기로 한다.
//1
else {
return parseInt(price);
//2
else {
return Math.floor(price);
다 해봤지만 else 인 경우는 이미 price 그 자체이기 때문에 정수로 변환해줄 필요가 없다. 그렇다면 왜 자꾸 2가지에는 안되는 것인가!! 고민고민고민 ...
분명 제한사항에 소수점 이하를 버린 정수를 return 하란 말에는 의미가 있을 것이다. 만약 123450원 이라면 123450*0.95=117277.5 !!!!!!!!!!!!
그러므로 여기에 정수변환 메서드를 써야했던 것이다.
function solution(price) {
if (price >= 100000 && price < 300000) {
return Math.floor(price*0.95);
} else if (price >= 300000 && price < 500000) {
return Math.floor(price*0.9);
} else if (price >= 500000) {
return Math.floor(price*0.8);
} else {
return price;
}
}
헉 14점이나 받았다.
좋은 코드라고는 생각안하는데 왜지 ? 이렇게 큰 점수가 있을 줄이야 ..
보통 나는 if문이나 for문으로 자주 풀어서 다른 분들의 풀이를 봤을 때 눈이 번쩍 뜨이는 풀이법들이 많은데, 이번 문제는 대부분 if문으로 풀었고, 삼항연산자도 몇 있었지만 코드가 한줄에 너무 길어져서 이 경우에는 if문이 맞다고 본다! 기발한 풀이법이 딱히 없어서 후한 점수를 받은 듯 하다.
그리고 오늘도 tilde
연산자 발견!
function solution(price) {
if(price >= 500000) {
price *= 0.8;
} else if(price >= 300000) {
price *= 0.9;
} else if(price >= 100000) {
price *= 0.95;
}
return Math.floor(price);
}
큰 수부터 조건문을 걸어두면 나처럼 &&연산자를 사용하지 않고 + return 문을 삭제해서 차근차근 조건을 내려올 수 있도록 하면 된다.
🪄 if문의 작동 방법을 유의할 것
function solution(price) {
price = price>=500000?price*0.8:price>=300000?price*0.9:price>=100000?price*0.95:price;
return ~~(price);
}
~~ 연산자(tilde)
는 비트 단위 NOT 연산자를 두 번 적용하는 것으로, 주어진 수를 소수점 이하를 버리고 정수형으로 변환하는 역할을 한다. 이 연산자는 다른 연산자보다 빠르게 동작하기 때문에 속도가 중요한 연산에서 자주 사용된다고 한다.