1️⃣ To do list
- 코드카타 2개
- 개인과제 해설 영상 시청
- 숫자 야구 게임 review (→ 코드 개선)
- 문법 복습 : 구조체, 상속, 프로토콜
2️⃣ 코드카타 (알고리즘)
<풀이>
▶️ [Swift|코드카타] (프로그래머스) #43. 크기가 작은 부분 문자열 - dropFirst(_:), suffix(_:)
▶️ [Swift|코드카타] (프로그래머스) #44. 최소직사각형
🔹 dropFirst(_:)
배열.dropFirst(0 이상의 숫자) : 배열[0..<숫자]를 떼어낸 나머지 부분열(subsequence) 반환
let numbers = [1, 2, 3, 4, 5]
let a = numbers.dropFirst(2) // [3, 4, 5]
type(of: a) // ArraySlice<Int>
🔹 suffix(_:)
배열.suffix(0 이상의 숫자) : 배열의 뒤에서부터 숫자만큼의 부분열(subsequence) 반환 (<-> prefix(_:)
let numbers = [1, 2, 3, 4, 5]
let b = numbers.suffix(2) // [4, 5]
type(of: b) // ArraySlice<Int>
2️⃣ 개인과제(2) - 숫자 야구 게임
🔸 코드 리뷰
깃헙(링크)
숫자 야구 게임 과제를 Lv6까지 스스로 구현한 후, 튜터님의 코드와 비교해봤는데,
SOLID 원칙 중 SRP(단일 책임 원칙)을 지키지 않고 있다는 것을 깨달았다.
한 개의 함수 - game()에 숫자 초기화, 입력값 받기, 정답 맞히기 등, 여러 기능을 물려두었었는데, SRP 원칙을 지키기 위해 코드를 대거 수정했다.
꼬리에 꼬리를 물고 있던 코드를 하나씩 분리해내는 과정이 쉽지는 않았지만, 결국 성공했다!
3️⃣ 새로 알게 된 내용
🔹 shuffle(), shuffled() : array의 원소를 무작위로 정렬
▶️ 배열1.shuffle() -> 배열1이 무작위로 정렬됨 (mutating)
▶️ let 배열2 = 배열1.shuffled() -> 무작위로 정렬된 배열1이 배열2에 저장됨 (nonmutating)
🔹 ArraySubsequence 타입
# Array에서 []를 이용해 추출한 부분열의 타입은 Array가 아니다!!
부분열 타입 => Array<Int>.SubSequence' (aka 'ArraySlice<Int>')
append, reduce와 같은 메소드는 사용 가능하지만,
한 번 더 부분열을 만들거나, 당연하게도 [Int] 타입에 저장하기는 안 된다.
# 초기화 메소드로 Subsequence 타입을 Array 타입으로 바꾸기
➡️ [Int](suqsequence)
➡️ Array(suqsequence)
'Swift > TIL(TodayILearned)' 카테고리의 다른 글
[Swift|TIL] 240322 - TableView 구현하기(1) (0) | 2024.03.23 |
---|---|
[Swift|TIL] 240318~0319 - UIViewComponents (0) | 2024.03.19 |
[Swift|TIL] 240312 - 접근 제한자, extension, subscript (1) | 2024.03.12 |
[Swift|코드카타] (프로그래머스) 입문 #35. 부족한 금액 계산하기 - 수학 공식을 활용하여 더 가볍게 코딩! (0) | 2024.03.08 |
[Swift|TIL] 240307 회고 (0) | 2024.03.08 |