반응형
Set의 메소드들이 너무 잘 구현되어 있어서 거저먹을 수 있는 문제.
1. 듣도 못한 사람들로 Set<String>을 만든다.
2. 보도 못한 사람들로 Set<String>을 만든다.
3. 듣도 보도 못한 사람을 두 집합의 intersection(_:)으로 구한다.
4. 듣도 보도 못한 사람을 sorted()로 정렬해서 사전 순으로 출력한다.
1. 듣도 못한 사람들로 Set<String>을 만든다.
이 문제는 교집합을 구하는 문제이다. 딕셔너리나 이분탐색으로 직접 교집합을 구할 수도 있겠지만, 스위프트의 Set에는 이미 intersection 메소드가 있으니 편하게 이걸 사용하기 위해서 Set으로 만들어준다.
2. 보도 못한 사람들로 Set<String>을 만든다.
1번과 마찬가지로 M명을 입력으로 받아 하나의 Set으로 만들어준다.
3. 듣도 못한 사람들도 Set<String>을 만든다.
Set에서 교집합을 구하는 함수 intersection(_:)을 써서 구하면 끝.
func intersection(_ other: Set<Element>) -> Set<Element>
let neverHeardAndSeen = neverHeard.intersection(neverSeen)
4. 듣도 보도 못한 사람을 sorted()로 정렬해서 사전 순으로 출력한다.
Set에서도 sorted()가 제공돼서 사전순으로 출력하는 것도 문제없다. 개수는 count로 구하면 된다. N이 500,000이나 돼서 print()를 N번 호출하면 (안 해봤지만) 시간 초과가 날지도 모른다. 웬만하면 결과는 하나의 문자열로 만들어서 print는 1번만 해주자!
import Foundation
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let N = input[0]
let M = input[1]
var neverHeard = Set<String>()
var neverSeen = Set<String>()
for _ in 0..<N {
let name = readLine()!
neverHeard.insert(name)
}
for _ in 0..<M {
let name = readLine()!
neverSeen.insert(name)
}
let neverHeardAndSeen = neverHeard.intersection(neverSeen)
var result = ""
result.write("\(neverHeardAndSeen.count)\n")
neverHeardAndSeen.sorted().forEach{ result.write("\($0)\n") }
print(result)
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
백준 2178번 미로 탐색 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.16 |
---|---|
백준 2630번 색종이 만들기 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.16 |
백준 1620번 나는야 포켓몬 마스터 이다솜 - 스위프트(Swift) 풀이 (0) | 2022.01.16 |
백준 12851번 숨바꼭질 2 - 스위프트(Swift) 풀이 (0) | 2022.01.15 |
백준 1697번 숨바꼭질 - 스위프트(Swift) 풀이 (0) | 2022.01.15 |
댓글