알고리즘 문제 풀이

[Swift] BOJ 1920 수 찾기

lgvv 2022. 5. 12. 21:47

BOJ 1920 수 찾기

 

✅ 이진탐색을 구현하는 문제이다. 

아니 이진탐색 그 자체이다.

 

✅ 코드

 

자료구조와 함께 추가하였다. 이진 탐색 포스팅은 최대한 빨리 하도록하자 

 

import Foundation

/// 오름차순으로 정렬 된 리스트에서 item의 index를 반환합니다. 없으면 -1
func binarySearchForAscending<T: Comparable>(array: [T], item: T) -> Int {
    var low = 0
    var high = array.count - 1
    
    while low <= high {
        let mid = (low + high) / 2
        let guess = array[mid]
        if guess == item {
            return mid
        } else if guess > item {
            high = mid - 1
        } else {
            low = mid + 1
        }
    }
    
    return -1
}

        _ = Int(readLine()!)!
        var searchList = [Int]()
        var input = readLine()!.components(separatedBy: " ").map { Int($0)! }
        
        input.forEach { searchList.append($0) }
        
        _ = Int(readLine()!)!
        var numberList = [Int]()
        input = readLine()!.components(separatedBy: " ").map { Int($0)! }
        
        input.forEach { numberList.append($0) }
       
        searchList.sort(by: <)
//        print(searchList) // 기준
//        print(numberList) // 찾아야 하는 기준 숫자
        
        var answer = [Int]()
        numberList.forEach {
            let a = binarySearchForAscending(array: searchList, item: $0)
            if a == -1 {
                answer.append(0)
            } else {
                answer.append(1)
            }
        }
        
        answer.forEach {
            print($0)
        }

 

 

(참고)

https://babbab2.tistory.com/104

 

Swift) 탐색 :: 이진 탐색(Binary Search) 이해하기

안녕하세요 :) 소들입니다!!!!!!! 이번 포스팅은 탐색 알고리즘 중에서도, 이진 탐색 알고리즘에 대해 다뤄볼까 합니다!!! 👀 이전에 공부한 완전 탐색 알고리즘은, 최악의 경우 모든 배열을 순회

babbab2.tistory.com

https://icksw.tistory.com/27

 

[백준] 1920번 수 찾기[Swift]

문제 링크 1920번: 수 찾기 첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주

icksw.tistory.com