์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

6.11. ๋‹จ๊ณ„ ์ชผ๊ฐœ๊ธฐ (Split Phase)

๐Ÿœ๊ฐœ๋ฐœ์ž๋ผ๋ฉด/์ฑ…์„ ์ฝ์žโœ

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2021. 9. 26. 19:04

๋ณธ๋ฌธ

- ๋™์ž‘์„ ์—ฐ์ด์€ ๋‘ ๋‹จ๊ณ„๋กœ ์ชผ๊ฐ ๋‹ค.

- ์ปดํŒŒ์ผ๋Ÿฌ ์ฒ˜๋Ÿผ

// orderString = "-์ƒํ’ˆ๋ฒˆํ˜ธ ์ˆ˜๋Ÿ‰" 
const orderData = orderString.split(/\s+/);

// orderData = ["-์ƒํ’ˆ๋ฒˆํ˜ธ","์ˆ˜๋Ÿ‰"] 
// priceList = { ์ƒํ’ˆ๋ฒˆํ˜ธ : ์ƒํ’ˆ๊ธˆ์•ก } 
const productPrice = priceList[orderData[0].split("-")[1]]; 

// ์ƒํ’ˆ ๊ฐ€๊ฒฉ 
const orderPrice = parseInt(orderData[1])*productPrice; 

// ์ฃผ๋ฌธ๊ฐ€ = ์ƒํ’ˆ ๊ฐ€๊ฒฉ*์ˆ˜๋Ÿ‰ 
// ๋ณ€๊ฒฝํ›„ 
const orderRecord = parseOrder(order); 
const orderPrice = price(orderRecord,priceList); 

//์ฃผ๋ฌธ๊ฐ€ 
function parseOrder(aString){// ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ 
    const values = aString.split(/\s+/); 
    return ({ productId: values[0].split("-")[1], quantity: parseInt(values[1]), }); 
} 
function price(order,priceList){ 
    return order.quantity*priceList[order.productId]; 
}

 


๋ฐฉ๋ฒ•

1. ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋…๋ฆฝ ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•œ๋‹ค.
2. ํ…Œ์ŠคํŠธํ•œ๋‹ค.
3. ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์•ž์—์„œ ์ถ”์ถœํ•œ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.
4. ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.
5. ์ถ”์ถœํ•œ ๋‘๋ฒˆ์งธ ๋‹จ๊ณ„ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฒ€ํ† ํ•œ๋‹ค. ๊ทธ ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์˜ฎ๊ธด๋‹ค. ํ•˜๋‚˜์”ฉ ์˜ฎ๊ธธ ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธํ•œ๋‹ค.
6. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„ ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•˜๋ฉด์„œ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค.


๋‹จ๊ณ„ ์ชผ๊ฐœ๊ธฐ - ์—ฐ์ด์€ ๋‘ ๋‹จ๊ณ„

์ƒํ’ˆ์˜ ๊ฒฐ์ œ ๊ธˆ์•ก ๊ณ„์‚ฐ
1. ์ƒํ’ˆ ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ : ๋ฐ์ดํ„ฐ - ์ƒํ’ˆ์ •๋ณด
2. ๋ฐฐ์†ก๋น„ ๊ณ„์‚ฐ : ๋ฐ์ดํ„ฐ - ๋ฐฐ์†ก์ •๋ณด
// ๋ณ€๊ฒฝ ์ „ 
function priceOrder(product, quantity, shippingMethod){ 
    // 1. ์ƒํ’ˆ ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ 
    const basePrice = product.basePrice*quantity;
    const discount = Math.max(quantity-product.discountThreshold,0)
    *product.basePrice*product.discountRate; 

    // 2. ๋ฐฐ์†ก๋น„ ๊ณ„์‚ฐ 
    const shippingPerCase = (basePrice>shippingMethod.discountThreshold) 
        ?shippingMethod.discountedFee:shippingMethod.feePerCase; 
    const shippingCost = quantity*shippingPerCase; 
    const price = basePrice-discount + shippingCost; 
    return price; 
}

ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•œ๋‹ค.

// ๋‘๋ฒˆ์งธ ๊ณ„์‚ฐ ๋ถ€๋ถ„์„ ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•œ๋‹ค. 
function priceOrder(product, quantity, shippingMethod){ 
    // 1. ์ƒํ’ˆ ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ 
    const basePrice = product.basePrice*quantity; 
    const discount = Math.max(quantity-product.discountThreshold,0)
                     *product.basePrice*product.discountRate; 
    // 2. ๋ฐฐ์†ก๋น„ ๊ณ„์‚ฐ 
    const price = applyShipping(basePrice,shippingMethod,quantity,discount);
    return price; 
} 
function applyShipping(basePrice, shippingMethod, quantity, discount){ 
    const shippingPerCase = (basePrice>shippingMethod.discountThreshold) 
    ?shippingMethod.discountedFee:shippingMethod.feePerCase; 
    const shippingCost = quantity*shippingPerCase;
    const price = basePrice-discount + shippingCost; 
    return price; 
}


์ค‘๊ฐ„๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๋‹ค.

function priceOrder(product, quantity, shippingMethod){ 
    const basePrice = product.basePrice*quantity; 
    const discount = Math.max(quantity-product.discountThreshold,0)
           *product.basePrice*product.discountRate; 
    
    // ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ 
    const priceData = {basePrice:basePrice, quantity:quantity, discount:discount}; 
    
    const price = applyShipping(priceData,shippingMethod); 
    return price; 
} 

function applyShipping(priceData, shippingMethod){ 
    const shippingPerCase = (priceData.basePrice>shippingMethod.discountThreshold) 
          ?shippingMethod.discountedFee:shippingMethod.feePerCase; 
    const shippingCost = priceData.quantity*shippingPerCase; 
    const price = priceData.basePrice-priceData.discount + shippingCost; 
    return price; 
}

์ฒซ๋ฒˆ์งธ ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๋„๊ฒŒ ํ•œ๋‹ค.

function priceOrder(product, quantity, shippingMethod){ 
    const priceData = calculatePricingData(product,quantity); 
    return applyShipping(priceData,shippingMethod); 
} 

function calculatePricingData(product,quantity){ 
    const basePrice = product.basePrice*quantity; 
    const discount = Math.max(quantity-product.discountThreshold,0)
    *product.basePrice*product.discountRate; 
    return {basePrice:basePrice, quantity:quantity, discount:discount}; 
} 

function applyShipping(priceData, shippingMethod){ 
    const shippingPerCase = (priceData.basePrice>shippingMethod.discountThreshold) 
                          ?shippingMethod.discountedFee:shippingMethod.feePerCase; 
    const shippingCost = priceData.quantity*shippingPerCase; 
    const price = priceData.basePrice-priceData.discount + shippingCost; 
    return price; 
}

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ