오늘 뭐했냐/기억하면 좋을 문제들

옷가게 할인 받기(총 구매 가격에 따른 할인률 적용가)

스스로에게 2023. 5. 26. 18:08

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

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

경우의 수를 if문으로 처리하였다 당연히 중첩 삼항연산자로도 변환이 가능한데 

function solution(price) {
    return price >= 500000 ? Math.floor(price * 0.8) 
        : price >= 300000 ? Math.floor(price * 0.9) 
        : price >= 100000 ? Math.floor(price * 0.95) : Math.floor(price * 1)
}

중첩된 삼항연산자를 줄을 바꿔 가독성을 올려주었다

그래도 삼항연산자는 중첩해서 사용하는 건 지양할 것 같다

 

const discounts = [
    [500000, 20],
    [300000, 10],
    [100000,  5],
] // 이차원 배열을 만든다

const solution = (price) => {
    for (const discount of discounts) // 이차원배열 안에 요소들을 하나씩 다른 변수에 담아 반복
        if (price >= discount[0]){
            return Math.floor(price - price * discount[1] / 100)
            }
    return price
}

// for(let i = 0 ; i < arr_discount.length ; i++)
//        if(arr_discount[i][0] <= price){
// return Math.trunc(price * (1-arr_discount[i][1]))
// }

이차원 배열과 for of 문을 통해서 반복하였다 ( for문을 통한 반복은 주석으로 첨부)

배열도 가로로 써도 문제는 없는데 세로로 알아보기 쉽게 처리 한 부분도 마음에 들었다