Swift Data Structure And Algorithm/Binary Search
μ«μλ°μ€
youngjaeLee1026
2022. 4. 2. 00:16
1. λ¬Έμ
2. μ μΆλ ₯
3. μ μΆλ ₯ μμ
4. λ¬Έμ μ€κ³
- N(300,000)κ°μ μ«μμ λν΄ M(500,000)λ²μ νμμ νκ² λλ©΄, 300,000 * 500,000 = 150,000,000,000 μ΄λ―λ‘,
- μκ°μμ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ. λ°λΌμ λ€λ₯Έ νμ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ ν¨
- N(300,000)κ°μ μ«μμ λν΄ μ λ ¬μ νκ² λλ©΄ ν©λ³ μ λ ¬, ν΅μ λ ¬ λ± κ³ κΈ μ λ ¬μ ν΅ν΄ O(N log N)μ μκ°λ³΅μ‘λλ‘ μ λ ¬μ ν μ μκ³ ,
- μ΄λ―Έ μ λ ¬λ μκ³ λ¦¬μ¦μ λν΄ μ΄μ§νμμ νκ² λλ©΄ O(log N)μ΄κ³ μ΄λ₯Ό M(500,000)λ² λ°λ³΅νκ² λλ©΄,
- O(N log N) + O(M log N)μ μκ°λ³΅μ‘λλ‘ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ
5. μ 체 μ½λ
//MARK: - μ«μλ°μ€
//MARK: - Framework
import Foundation
//MARK: - Function
func binarySearch(_ array: [Int], _ start: Int, _ end: Int, _ value: Int) -> Bool {
if start >= end {
return array[start] == value ? true : false
}
let mid = (start + end) / 2
if array[mid] == value {
return true
}
return array[mid] < value ? binarySearch(array, mid + 1, end, value) : binarySearch(array, start, mid - 1, value)
}
func solution() -> Void {
//MARK: - Input
guard let N: Int = Int(readLine() ?? "0") else { return }
guard let inputArray = readLine()?.components(separatedBy: " ") else { return }
guard let _: Int = Int(readLine() ?? "0") else { return }
guard let inputCandidates = readLine()?.components(separatedBy: " ") else { return }
let array: [Int] = inputArray.map { Int($0) ?? 0 }.sorted { $0 < $1 }
let candidates: [Int] = inputCandidates.map { Int($0) ?? 0 }
var answer: String = ""
//MARK: - Process
for candidate in candidates {
answer += binarySearch(array, 0, N - 1, candidate) ? "\(1)\n" : "\(0)\n"
}
//MARK: - Output
print(answer)
}
solution()
μ 체μ½λλ μ¬κΈ°μμ νμΈν μ μμ΅λλ€.