Hashable
- 프로토콜이다. → 구조체, 열거형, String, Int, Float, Bool, Set 등에서 기본적으로 제공된다.
- 사용자 정의 타입에서 채택만 하면 → Set에 들어갈 수 있는 타입도 되고, Dictionary의 Key로도 들어갈 수 있다.
- 코드 예시
struct GridPoint: Hashable {
var x: Int
var y: Int
}
// 이렇게도 되고
var majayongSet = Set<GridPoint>()
// 이렇게도 된다
var majayongDic: [GridPoint: Int] = [:]
Set
Swift’s Collection (Array, Dictionary, Set)에 속한다.
- 컬렉션이 가지는 기본 메서드들을 사용할 수 있다.
- .contains(), .firstIndex(of: ) 등
배열과 비슷하지만, 중복된 값을 넣을 수 없기 때문에 아무리 추가해도 고유한 요소들만 남는다는 특징을 가진다.
순서가 정해져 있지 않다.
- 빌드할 때마다 출력되는 값들의 순서가 달라진다.
코드 예시
var myFriends: Set<String> = ["철수", "영희", "수지"]
// .contains()
if myFriends.contains("철수") {
print("내 친구 중에 철수가 있다!")
}
if !myFriends.contains("철수") {
print("내 친구 중에 철수는 없다...")
}
// .firstIndex(of: )
if let indexToRemove = myFriends.firstIndex(of: "영희") {
// if let으로 감싸준 이유 → .firstIndex(of: )는 Optional 타입으로 반환되기 때문
myFriends.remove(at: indexToRemove)
}
Dictionary
배열 형태의 key:value로 이루어진다.
- 사물함을 여는 것으로 예시를 들 수 있다.
key를 통해 value를 가져오는데, 존재하지 않는다면 (= nil 이라면) 미리 정해둔 default 값을 꺼낼 수 있다.
- 코드 예시
var myFriends = ["best" : "냐옹이",
"awkward" : "지우"
]
let unknownFriend = myFriends["unknwon", defualt: "모름"]
값을 바꾸거나 새로운 데이터를 넣을 수 있다.
- 새로운 key로 직접 추가
- Collection 메서드 이용 → .updateValue(value: , forKey: )
활용 - 백준 1157번
let input = readLine()!.uppercased()
var splitted: [Character] = [ ]
input.forEach { character in
splitted.append(character)
}
let alphabetSet: Set<Character> = Set(splitted)
var counted: [Character: Int] = [:]
for alphabet in alphabetSet {
let num = splitted.filter { character in
return alphabet == character
}.count
counted[alphabet] = num
}
let filtered = counted.filter { dictionary in
return dictionary.value == counted.values.max()!
}
if filtered.count == 1 {
print(filtered.first!.key)
} else { print("?") }
참고
Swift ) Hashable
스위프트 기초 문법 - 14일차 / 딕셔너리
스위프트 기초 문법 - 19일차 / Set
[Swift] 1157 단어공부 - 백준 B1
'공부 > Swift, algorithm' 카테고리의 다른 글
[Swift] #Selector() (0) | 2022.04.19 |
---|---|
타입 메서드와 프로퍼티 (0) | 2022.04.14 |
MacOS (Xcode)에서 #include <bits/stdc++.h> 헤더 사용하기 (0) | 2022.01.28 |
퀵 정렬 (0) | 2021.08.26 |
버블정렬, 선택정렬, 삽입정렬 (0) | 2021.08.24 |
댓글