주간 그리드
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는 비정상 종료될 수 있으므로, 입력 형식을 신뢰하십시오.
챌린지
중급한 줄의 입력을 읽습니다: 쉼표로 구분된 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>' 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.