ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

Decorator ของราคา

ห่อราคาพื้นฐานด้วยตัวตกแต่ง discount, tax, shipping และ coupon ที่นำไปใช้ตามลำดับ

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

  • ซ้อนพฤติกรรมเป็นชั้นรอบค่าหนึ่ง
  • ใช้เปอร์เซ็นต์ตามลำดับที่ถูกต้อง
  • ไม่ให้ค่าต่ำกว่าศูนย์

โจทย์

แพตเทิร์น decorator เพิ่มพฤติกรรมโดยการห่ออ็อบเจ็กต์เป็นชั้น ๆ แต่ละชั้นที่นี่จะเปลี่ยนราคาของชั้นที่อยู่ข้างใน

เริ่มจาก base_price และใช้ตัวตกแต่งตามลำดับ:

  • discount p: ลดราคาลง p เปอร์เซ็นต์.
  • tax p: เพิ่มราคาขึ้น p เปอร์เซ็นต์.
  • shipping a: บวกจำนวนคงที่ a.
  • coupon a: ลบ a แต่ต้องไม่ต่ำกว่า 0.

Implement price_decorators(base_price, decorators).

ข้อมูลนำเข้า

base_price: The starting price.

decorators: The layers, in the order they wrap the price. Amounts may have decimals.

ผลลัพธ์

Return the final price. Answers within 1e-6 are accepted.

เงื่อนไข

0 ≤ base_price ≤ 1,000,000

0 ≤ จำนวน decorator ≤ 100; 0 ≤ p ≤ 100, 0 ≤ a ≤ 100,000

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
base_price = 100
decorators = ["discount 10", "tax 8", "shipping 5"]

ผลลัพธ์ที่คาดหวัง:
expected = 102.2
อินพุต:
long long base_price = 100;
std::vector<std::string> decorators = {"discount 10", "tax 8", "shipping 5"};

ผลลัพธ์ที่คาดหวัง:
double expected = 102.2;
อินพุต:
long base_price = 100;
string[] decorators = new string[] {"discount 10", "tax 8", "shipping 5"};

ผลลัพธ์ที่คาดหวัง:
double expected = 102.2;

คำอธิบาย

100 − 10% = 90 บวกภาษี 8% = 97.2 บวกค่าส่ง 5 = 102.2

ตัวอย่างที่ 2
อินพุต:
base_price = 20
decorators = ["coupon 25", "shipping 4"]

ผลลัพธ์ที่คาดหวัง:
expected = 4.0
อินพุต:
long long base_price = 20;
std::vector<std::string> decorators = {"coupon 25", "shipping 4"};

ผลลัพธ์ที่คาดหวัง:
double expected = 4.0;
อินพุต:
long base_price = 20;
string[] decorators = new string[] {"coupon 25", "shipping 4"};

ผลลัพธ์ที่คาดหวัง:
double expected = 4.0;

คำอธิบาย

คูปองจะทำให้ราคาต่ำกว่าศูนย์ ราคาจึงหยุดที่ 0 แล้วค่าส่งทำให้เป็น 4

แนวทางการแก้

ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ

คำใบ้ 1

ใช้ชั้นต่าง ๆ ตามลำดับที่ให้มาเท่านั้น

คำใบ้ 2

เปอร์เซ็นต์คิดจากราคาปัจจุบัน ไม่ใช่ราคาตั้งต้น

คำใบ้ 3

คูปองไม่มีทางทำให้ราคาต่ำกว่า 0

ความซับซ้อนที่คาดหวัง

เวลา O(จำนวน decorator), หน่วยความจำเพิ่ม O(1)

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

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

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

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