728x90
https://www.acmicpc.net/problem/1764
1764번: 듣보잡
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.
www.acmicpc.net
이분탐색으로 간단하게 해결할 수 있는 문제.
N이 작으면 이분탐색보다는 선형탐색이 더 낫지만 500,000까지 가므로 이분탐색으로 해줬다.
듣지도 못한 사람의 명단을 String 배열로 만들어줬고, 보지도 못한 사람들을 하나씩 받아서 이분탐색으로 듣지도 못한 사람 명단에 이름이 있는지 확인해 줬다.
import Foundation
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let n = input[0]
let m = input[1]
var dontListen = [String]()
var answer = [String]()
for _ in 0..<n {
dontListen.append(readLine()!)
}
dontListen = dontListen.sorted()
for _ in 0..<m {
let dontSee = readLine()!
var left = 0
var right = n-1
while left <= right {
let mid = (left + right) / 2
if dontListen[mid] == dontSee {
answer.append(dontSee)
break
}else if dontListen[mid] < dontSee {
left = mid + 1
}else {
right = mid - 1
}
}
}
print(answer.count)
answer.sorted().forEach {
print($0)
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/Swift] 20057번: 마법사 상어와 토네이도 (0) | 2023.01.29 |
---|---|
[백준/Swift] 10816번: 숫자 카드 2 (0) | 2023.01.26 |
[백준/Swift] 14889번: 스타트와 링크 (1) | 2023.01.26 |
[백준/Swift] 16508번: 전공책 (1) | 2023.01.26 |
[백준/Swift] 14501번 퇴사(백트래킹) (0) | 2023.01.19 |