Swift Data Structure And Algorithm/Binary Search

이진탐색

youngjaeLee1026 2022. 4. 2. 00:08

1. 문제

스크란샷 2022-04-02 00 03 18

2. μž…μΆœλ ₯

스크란샷 2022-04-02 00 03 33

3. μž…μΆœλ ₯ μ˜ˆμ‹œ

스크란샷 2022-04-02 00 03 57

4. 문제 섀계

  1. n(100,000)개의 μˆ«μžμ— λŒ€ν•΄ q(100,000)번의 탐색을 ν•˜κ²Œλ˜λŠ” 경우, ν•œ 번 탐색할 λ•Œλ§ˆλ‹€ μ΅œμ•…μ˜ 경우 100,000λ²ˆμ„ q번 ν•˜κ²Œ 되면,
  2. 100,000 * 100,000 = 10,000,000,000 μ΄λ―€λ‘œ, μ‹œκ°„μ•ˆμ— 문제λ₯Ό ν•΄κ²°ν•  수 μ—†μŒ.
  3. λ”°λΌμ„œ λ‹€λ₯Έ 탐색 μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 문제λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•˜λŠ”λ° μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ©΄ 이미 μ •λ ¬λ˜μ–΄ μžˆλŠ” μˆ˜μ—΄μ΄λ―€λ‘œ,
  4. 이진탐색을 톡해 O(log n)의 μ‹œκ°„λ³΅μž‘λ„λ‘œ 탐색을 ν•  수 있고, 이λ₯Ό q번 λ°˜λ³΅ν•˜μ—¬ O(q 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: Int = (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 input = readLine()?.components(separatedBy: " ") else { return }
    guard let inputArray = readLine()?.components(separatedBy: " ") else { return }
    guard let inputQuestions = readLine()?.components(separatedBy: " ") else { return }
    
    let n: Int = input.map{ Int($0) }[0] ?? 0
    let _: Int = input.map { Int($0) }[1] ?? 0
    let array: [Int] = inputArray.map { Int($0) ?? 0 }
    let questions: [Int] = inputQuestions.map { Int($0) ?? 0 }
    var answer: String = ""
    
    //MARK: - Process
    for question in questions {
        answer += binarySearch(array, 0, n - 1, question) ? "YES\n" : "NO\n"
    }
    
    //MARK: - Output
    print(answer)
}
solution()

 

μ „μ²΄μ½”λ“œλŠ” μ—¬κΈ°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

'Swift Data Structure And Algorithm > Binary Search' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

λ‚˜λ¬΄ 자λ₯΄κΈ°  (0) 2022.04.02
2차식 μ •λ‹΅ μΆ”μΈ‘  (0) 2022.04.02
두 μš©μ•‘  (0) 2022.04.02
숫자 개수 μ„ΈκΈ°  (0) 2022.04.02
μˆ«μžλ°•μŠ€  (0) 2022.04.02