Menu
Coddy logo textTech

요약 보고서

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

최종 기능: 한 가지 카테고리만 진행하는 대신, 전체 퀴즈를 실행하고 마지막에 카테고리별 요약을 생성합니다.

당신은 모든 장의 내용을 한꺼번에 활용하게 될 것입니다. 반복을 위한 튜플 구조 분해(tuple destructuring), 문자열 장의 관대한 채점(lenient grading), 딕셔너리 장의 기본 서브스크립트 딕셔너리(default-subscript dictionaries), 그리고 결정론적 출력을 위한 정렬된 반복(sorted iteration)을 모두 사용합니다.

카테고리별 카운터를 두 개의 병렬 딕셔너리로 작성합니다:

var totals: [String: Int] = [:]
var rights: [String: Int] = [:]

모든 질문에 대해 totals[cat, default: 0] += 1을 증가시키고, 정답인 경우에만 rights[cat, default: 0]를 증가시킵니다. 마지막에는 보고서를 출력하기 위해 카테고리를 알파벳 순서로 순회합니다.

challenge icon

챌린지

중급

이전 레슨과 동일한 6개 질문 은행입니다. stdin에서 한 줄에 하나씩, 은행과 동일한 순서로 6개의 답변을 읽으세요. 관대한 채점(lenient grading) 방식을 사용하세요.

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

  1. 카테고리별로 한 줄씩 알파벳 순으로 정렬하여 <category>: <right>/<total> 형식으로 출력
  2. 마지막 한 줄: 전체 실행에 대한 Total: <right>/<total> 출력

입력값이 4 / 3.14 / Paris / Atlantic / green / WATER인 경우, 출력은 다음과 같습니다:

geo: 1/2
math: 2/2
science: 2/2
Total: 5/6

치트 시트

카테고리별 점수를 추적하기 위해 두 개의 병렬 딕셔너리를 사용합니다:

var totals: [String: Int] = [:]
var rights: [String: Int] = [:]

// 카테고리가 cat인 각 질문에 대해:
totals[cat, default: 0] += 1
// 정답인 경우:
rights[cat, default: 0] += 1

결정론적인 출력을 위해 sorted()를 사용하여 카테고리를 알파벳 순서로 순회합니다:

for cat in totals.keys.sorted() {
    let r = rights[cat, default: 0]
    let t = totals[cat]!
    print("\(cat): \(r)/\(t)")
}

딕셔너리 값을 합산하여 모든 카테고리의 총계를 계산합니다:

let totalRight = rights.values.reduce(0, +)
let totalAll = totals.values.reduce(0, +)
print("Total: \(totalRight)/\(totalAll)")

직접 해보기

let questions: [(String, String, String)] = [
    ("math", "2 + 2?", "4"),
    ("math", "Value of pi to 2 decimals?", "3.14"),
    ("geo", "Capital of France?", "Paris"),
    ("geo", "Largest ocean?", "Pacific"),
    ("science", "Color of grass?", "green"),
    ("science", "H2O is?", "water")
]

// TODO: 6개의 답변 읽기; 관대한 채점; 카테고리별 총계/정답 수 집계;
// 정렬된 요약 행 + 합계 출력
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨