โจทย์
Encapsulation ช่วยให้ข้อมูลของอ็อบเจ็กต์เป็นส่วนตัว และเปลี่ยนแปลงได้ผ่านเมธอดที่บังคับใช้กฎเท่านั้น ยอดเงินของบัญชีธนาคารเปลี่ยนได้ผ่าน deposit และ withdraw เท่านั้น
เริ่มต้นด้วยยอดเงิน 0 และประมวลผล operations แต่ละรายการ deposit <amount> หรือ withdraw <amount>:
- จำนวนที่เป็น 0 หรือค่าติดลบจะถูกปฏิเสธ
- การถอนที่มากกว่ายอดเงินปัจจุบันจะถูกปฏิเสธ
- มิฉะนั้นยอดเงินจะเปลี่ยนแปลง
Implement bank_account_rules(operations).
อินพุต
operations: The operations, in order.
เอาต์พุต
Return [final_balance, rejected_count].
เงื่อนไข
0 ≤ จำนวนคำสั่ง ≤ 100,000
−10^9 ≤ จำนวนเงิน ≤ 10^9
ตัวอย่าง
อินพุต:
operations = ["deposit 100", "withdraw 30", "withdraw 200"]
ผลลัพธ์ที่คาดหวัง:
expected = [70, 1]
อินพุต:
std::vector<std::string> operations = {"deposit 100", "withdraw 30", "withdraw 200"};
ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {70, 1};
อินพุต:
string[] operations = new string[] {"deposit 100", "withdraw 30", "withdraw 200"};
ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {70, 1};
คำอธิบาย
100 − 30 เหลือ 70 การถอน 200 จะทำให้ติดลบ จึงถูกปฏิเสธ: [70, 1]
อินพุต:
operations = ["deposit -5", "withdraw 0", "deposit 10"]
ผลลัพธ์ที่คาดหวัง:
expected = [10, 2]
อินพุต:
std::vector<std::string> operations = {"deposit -5", "withdraw 0", "deposit 10"};
ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {10, 2};
อินพุต:
string[] operations = new string[] {"deposit -5", "withdraw 0", "deposit 10"};
ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {10, 2};
คำอธิบาย
การฝากติดลบและการถอนเป็นศูนย์ถูกปฏิเสธทั้งคู่ ส่วนการฝากครั้งสุดท้ายสำเร็จ: [10, 2]
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
เก็บยอดเงินเป็น private และแก้ได้เฉพาะใน deposit และ withdraw
คำใบ้ 2
ปฏิเสธจำนวนเงินที่เป็น 0 หรือน้อยกว่าก่อนอย่างอื่น
คำใบ้ 3
การถอนต้องไม่ทำให้ยอดเงินต่ำกว่าศูนย์
ความซับซ้อนที่คาดหวัง
เวลา O(จำนวนคำสั่ง), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน