>  Algorithm >  상세

백준 - 수 찾기


목록:Algorithm    TAG: swift , algorithm , backjoon , 백준     등록일:2019-12-24    조횟수:

백준 - 수 찾기

문제

N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수들의 범위는 int 로 한다.

출력

M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.

예제 입력 1 복사

5
4 1 5 2 3
5
1 3 7 9 5

예제 출력 1 복사

1
1
0
0
1

문제 풀이

처음에 quick sort로만 풀었다가 시간초과로 인해

quick sort와 이진 탐색을 이용하여 풀었다.

import Foundation

var nIntsArray: [Int] = []

func main() {
    let N = readLine()
    let nArray = readLine()
    let M = readLine()
    let mArray = readLine()

    if let N = N, let nValue = Int(N), nValue > 0 && nValue < 100001,
        let nStringArray = nArray?.components(separatedBy: " "),
        var nIntArray: [Int] = nStringArray.map({ Int($0)! }),
        let M = M, let mValue = Int(M), mValue > 0 && mValue < 100001,
        let mStringArray = mArray?.components(separatedBy: " "),
        var mIntArray: [Int] = mStringArray.map({ Int($0)! }) {
        
        nIntArray.sort()
        
        nIntsArray = nIntArray
        
        for m in mIntArray {
            solution(n: nValue, key: m)
        }
    }
}


func solution(n: Int, key: Int) {
    var start = 0
    var end = n - 1
    var mid = 0
    
    while (end - start) >= 0 {
        mid = (start + end) / 2
        
        if nIntsArray[mid] == key {
            print("1")
            return
        }else if nIntsArray[mid] > key {
            end = mid - 1
        }else {
            start = mid + 1
        }
    }
    
    print("0")
}

main()
이 기사는 원본 기사입니다. 소스를 지정하십시오.:Kodaewon's Blog » 백준 - 수 찾기

이전: 프로그래머스 - 2016년