โจทย์ทั้งหมด
ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

Facade สำหรับการชำระเงิน

ซ่อนการตรวจสต็อกและการคำนวณราคารวมไว้หลังการเรียก checkout แบบง่าย ๆ เพียงครั้งเดียว

สิ่งที่คุณจะได้เรียนรู้

  • ซ่อนระบบย่อยหลายระบบไว้หลังการเรียกครั้งเดียว
  • ตรวจสต็อกก่อนเก็บเงิน
  • รวมบรรทัดตะกร้าที่เป็นสินค้าเดียวกัน

โจทย์

แพทเทิร์น facade ให้ทางเข้าที่เรียบง่ายสำหรับระบบย่อยที่ซับซ้อน การเรียก checkout ของร้านค้าซ่อนระบบย่อยไว้สองระบบ คือคลังสินค้าและรายการราคา

สินค้ามีหมายเลข 0 ถึง n − 1 โดย stock[i] คือจำนวนหน่วยของสินค้า i ที่มีอยู่ และ prices[i] คือราคา ตะกร้าคือลิสต์ของบรรทัด [item, quantity] สินค้าเดียวกันอาจอยู่หลายบรรทัด

checkout(stock, prices, cart) ต้อง:

  1. ตรวจคลังสินค้า: ถ้าจำนวนรวมของสินค้าใดในตะกร้ามากกว่าที่มีในคลัง คำสั่งซื้อล้มเหลว
  2. ไม่เช่นนั้นให้คืนราคารวมของตะกร้า

จงเขียน 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

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
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.

ตัวอย่างที่ 2
อินพุต:
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 กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก