โจทย์
แพทเทิร์น facade ให้ทางเข้าที่เรียบง่ายสำหรับระบบย่อยที่ซับซ้อน การเรียก checkout ของร้านค้าซ่อนระบบย่อยไว้สองระบบ คือคลังสินค้าและรายการราคา
สินค้ามีหมายเลข 0 ถึง n − 1 โดย stock[i] คือจำนวนหน่วยของสินค้า i ที่มีอยู่ และ prices[i] คือราคา ตะกร้าคือลิสต์ของบรรทัด [item, quantity] สินค้าเดียวกันอาจอยู่หลายบรรทัด
checkout(stock, prices, cart) ต้อง:
- ตรวจคลังสินค้า: ถ้าจำนวนรวมของสินค้าใดในตะกร้ามากกว่าที่มีในคลัง คำสั่งซื้อล้มเหลว
- ไม่เช่นนั้นให้คืนราคารวมของตะกร้า
จงเขียน checkout_facade(stock, prices, cart)
อินพุต
stock, prices: อย่างละ n ค่า
cart: บรรทัด [item, quantity]
เอาต์พุต
คืนราคารวม หรือ -1 ถ้ามีสินค้าใดในคลังไม่พอ
เงื่อนไข
1 ≤ n ≤ 1,000
0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ จำนวนบรรทัดในตะกร้า ≤ 1,000; 1 ≤ quantity ≤ 1,000
ตัวอย่าง
อินพุต:
cart = [
[0, 2],
[2, 4]
]
stock = [5, 2, 10]
prices = [3, 20, 1]
ผลลัพธ์ที่คาดหวัง:
expected = 10
อินพุต:
std::vector<std::vector<long long>> cart = {
{0, 2},
{2, 4}
};
std::vector<long long> stock = {5, 2, 10};
std::vector<long long> prices = {3, 20, 1};
ผลลัพธ์ที่คาดหวัง:
long long expected = 10;
อินพุต:
long[][] cart = new long[][] {
new long[] {0, 2},
new long[] {2, 4}
};
long[] stock = new long[] {5, 2, 10};
long[] prices = new long[] {3, 20, 1};
ผลลัพธ์ที่คาดหวัง:
long expected = 10;
คำอธิบาย
สินค้าทั้งสองรายการมีในสต็อก 2 × 3 + 4 × 1 = 10.
อินพุต:
cart = [
[1, 1],
[1, 2]
]
stock = [5, 2]
prices = [3, 20]
ผลลัพธ์ที่คาดหวัง:
expected = -1
อินพุต:
std::vector<std::vector<long long>> cart = {
{1, 1},
{1, 2}
};
std::vector<long long> stock = {5, 2};
std::vector<long long> prices = {3, 20};
ผลลัพธ์ที่คาดหวัง:
long long expected = -1;
อินพุต:
long[][] cart = new long[][] {
new long[] {1, 1},
new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};
ผลลัพธ์ที่คาดหวัง:
long expected = -1;
คำอธิบาย
Item 1 ปรากฏสองครั้งรวมเป็น 3 หน่วย แต่มีอยู่ในสต็อกเพียง 2 หน่วย ดังนั้นคำสั่งซื้อล้มเหลว: -1.
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
รวมจำนวนของสินค้าแต่ละชิ้นจากทุกบรรทัดในตะกร้าก่อน
คำใบ้ 2
เทียบยอดรวมเหล่านั้นกับสต็อกก่อนคำนวณราคาใด ๆ
คำใบ้ 3
ถ้ามีสินค้าใดไม่พอ ให้คืน -1 ทันที
ความซับซ้อนที่คาดหวัง
เวลา O(n + บรรทัดในตะกร้า), หน่วยความจำเพิ่ม O(n)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน