Menu
Coddy logo textTech

주간 그리드

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

이제 달력을 출력할 차례입니다. 각 습관별로, 완료한 날은 X로, 그렇지 않은 날은 .로 표시되는 7자리 그리드를 렌더링합니다.

// days = [1, 3, 5]
// 출력 결과: X.X.X..

유용한 패턴: 그리드를 문자 배열로 생성한 다음, 한 번에 String으로 변환하세요.

var slots = Array(repeating: ".", count: 7)
for d in days {
    slots[d - 1] = "X"
}
let row = slots.joined()

days는 1부터 시작하는 인덱스(Mon = 1)이지만 Swift 배열은 0부터 시작하는 인덱스이므로, 할당할 때 1을 뺍니다. 범위를 벗어난 days는 비정상 종료될 수 있으므로, 입력 형식을 신뢰하십시오.

challenge icon

챌린지

중급

한 줄의 입력을 읽습니다: 쉼표로 구분된 habit:day 항목 목록입니다. 이전과 같이 딕셔너리를 생성한 다음, 각 습관별로 한 줄씩(알파벳순으로 정렬) 다음 형식으로 출력합니다:

<habit> |<grid>| <count>

여기서 grid는 7개의 문자로 이루어진 X/. 문자열이며, count는 해당 습관을 수행한 고유한 날짜의 수입니다.

입력이 read:1,read:3,read:5,workout:2,workout:4인 경우, 출력은 다음과 같습니다:

read |X.X.X..| 3
workout |.X.X...| 2

치트 시트

완료된 날짜에는 X를 표시하고 그 외의 날짜에는 .를 표시하는 7자 그리드를 생성합니다 (날짜는 1부터 시작합니다):

var slots = Array(repeating: ".", count: 7)
for d in days {
    slots[d - 1] = "X"
}
let row = slots.joined()

직접 해보기

var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
for op in ops {
    let parts = op.components(separatedBy: ":")
    let day = Int(parts[1])!
    if !(habits[parts[0], default: []].contains(day)) {
        habits[parts[0], default: []].append(day)
    }
}

// TODO: 각 습관별로 7칸 그리드 생성; '<name> |<grid>| <count>' 출력
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨