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

นับระดับของ log

อ่านบรรทัดของไฟล์ log และนับว่าเป็น INFO, WARNING และ ERROR กี่บรรทัด

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

  • ประมวลผลไฟล์ทีละบรรทัด
  • ดึงคำแรกของบรรทัด
  • นับแต่ละประเภทด้วยตารางนับเล็ก ๆ

โจทย์

โปรแกรมจะเขียนไฟล์ log โดยหนึ่งเหตุการณ์ต่อหนึ่งบรรทัด แต่ละบรรทัดเริ่มด้วยคำระดับ ตามด้วยช่องว่างและข้อความ เช่น ERROR disk full

Given the lines of a log file, count the lines whose first word is exactly INFO, WARNING or ERROR. Lines that start with anything else (including lowercase levels) are ignored.

Implement count_log_levels(lines).

อินพุต

lines: บรรทัดของไฟล์ โดยไม่มีตัวขึ้นบรรทัดใหม่

เอาต์พุต

คืนค่า [info_count, warning_count, error_count].

เงื่อนไข

0 ≤ จำนวนบรรทัด ≤ 10,000

แต่ละบรรทัดยาวไม่เกิน 200 อักขระ

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
lines = ["INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"]

ผลลัพธ์ที่คาดหวัง:
expected = [2, 1, 1]
อินพุต:
std::vector<std::string> lines = {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {2, 1, 1};
อินพุต:
string[] lines = new string[] {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {2, 1, 1};

คำอธิบาย

มีสองบรรทัดขึ้นต้นด้วย INFO หนึ่งบรรทัดด้วย WARNING และหนึ่งบรรทัดด้วย ERROR: [2, 1, 1]

ตัวอย่างที่ 2
อินพุต:
lines = ["info lowercase", "DEBUG details", "ERROR"]

ผลลัพธ์ที่คาดหวัง:
expected = [0, 0, 1]
อินพุต:
std::vector<std::string> lines = {"info lowercase", "DEBUG details", "ERROR"};

ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {0, 0, 1};
อินพุต:
string[] lines = new string[] {"info lowercase", "DEBUG details", "ERROR"};

ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {0, 0, 1};

คำอธิบาย

"info" ไม่ใช่ "INFO" และไม่นับ DEBUG บรรทัดสุดท้ายมีแค่คำว่า ERROR ซึ่งนับ: [0, 0, 1]

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

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

คำใบ้ 1

มีแค่คำแรกของแต่ละบรรทัดที่สำคัญ

คำใบ้ 2

แยกครั้งเดียวที่ช่องว่างแรก แล้วเทียบคำนั้นแบบตรงตัว

คำใบ้ 3

ตัวพิมพ์เล็กใหญ่มีผล: "info" ไม่ใช่ "INFO" และบางบรรทัดอาจมีแค่คำระดับ

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

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

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

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

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

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

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