Menu
Coddy logo textTech

로그 집계기

Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 55번째.

challenge icon

챌린지

중급

액세스 로그를 처리하고 있습니다. 쉼표로 구분된 level:user:bytes 항목들이 포함된 한 줄의 입력을 읽으세요.

일부 항목은 잘못되었으므로 건너뛰어야 합니다: bytes를 정수로 파싱할 수 없거나, levelINFO, WARN, ERROR 중 하나가 아닌 경우(대소문자 구분)입니다.

다음 순서대로 출력하세요:

  1. 한 번이라도 나타난 레벨당 한 줄씩, ERROR, WARN, INFO의 고정된 순서로 정렬하여 출력합니다. 각 줄은 <level>: <count> (<bytes>) 형식이며, 여기서 count는 해당 레벨의 유효한 항목 수이고 bytes는 해당 항목들의 바이트 합계입니다.
  2. Top user: <name> (<bytes>): 모든 유효한 항목을 통틀어 총 바이트 수가 가장 많은 사용자입니다. 바이트 수가 같으면 이름의 알파벳 순으로 결정합니다.
  3. Skipped: <n>: 형식이 잘못된 항목의 개수입니다.

입력이 INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75인 경우, 출력은 다음과 같습니다:

ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2

직접 해보기

let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]

// TODO: 각 항목을 파싱하고, 잘못된 항목은 제외하며, 레벨별 및 사용자별로 누적합니다;
// 정해진 순서대로 레벨을 출력하고(나타난 경우에만), 최상위 사용자, 그 다음 제외된(Skipped) 개수를 출력합니다.

로직 및 흐름의 모든 레슨