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을 출력한다.
5
4 1 5 2 3
5
1 3 7 9 5
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()