Menu
Coddy logo textTech

값 그룹화하기

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

기본 첨자 패턴은 두 가지 일상적인 모양의 기초가 됩니다.

빈도 카운터: 각 키가 몇 번 나타나는지 셉니다.

let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
    counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]

버케팅(Bucketing): 파생된 키를 기준으로 값을 수집합니다:

let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
    byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]

버케팅(bucketing) 사례의 기본값은 빈 배열입니다. default: 값은 키가 누락된 경우에 사용되며, 이후 우변(right-hand side)이 해당 항목을 즉석에서 수정합니다.

challenge icon

챌린지

중급

입력으로 쉼표로 구분된 단어 목록이 포함된 한 줄을 읽습니다.

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

  1. 입력에 나타나는 각 단어 길이별로 한 줄씩, 짧은 것부터 긴 것 순으로 정렬하여 <length>: <count> 형식으로 출력합니다. 여기서 count는 해당 길이의 단어가 나타난 횟수입니다.
  2. Most common length: <n> 형식으로 출력하며, 여기서 n은 가장 빈도가 높은 길이입니다. 빈도가 같을 경우 더 짧은 길이를 선택합니다.

입력이 hi,hello,yo,hey,bonjour,bye인 경우, 출력은 다음과 같습니다:

2: 2
3: 2
5: 1
7: 1
Most common length: 2

(길이 2와 3이 모두 두 번씩 나타납니다. 빈도가 같으므로 더 짧은 길이인 2가 선택됩니다.)

치트 시트

빈도 카운터(Frequency counter)default: 0을 사용하여 각 키의 발생 횟수를 계산합니다:

var counts: [String: Int] = [:]
for letter in letters {
    counts[letter, default: 0] += 1
}

버케팅(Bucketing)default: []를 사용하여 파생된 키 아래에 값을 그룹화합니다:

var byLength: [Int: [String]] = [:]
for w in words {
    byLength[w.count, default: []].append(w)
}

default: 값은 키가 없을 때만 사용되며, 그 결과는 해당 위치에서 즉시 수정됩니다.

직접 해보기

let words = readLine()!.components(separatedBy: ",")

// TODO: 길이별 단어 수 세기; 정렬하여 출력; 가장 빈번한 단어 출력 (동률일 경우: 더 짧은 것)
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨