본문 바로가기
개발/CodingTest

[백준_이진탐색] 1920번 - 수 찾기 - 이해까지 도와주는 풀이

by on_master 2024. 1. 29.

문제

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안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

출력

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

예제 입력 1 복사

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

예제 출력 1 복사

1
1
0
0
1

 

 

풀이

 

전형적인 이진탐색 문제입니다.

 

소스 코드

def binary_search(arr, target):
    left, right = 0, len(arr) - 1

    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return 1  # 찾았을 경우 1을 반환
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1

    return 0  # 찾지 못했을 경우 0을 반환

# 입력 받기
N = int(input())  # 정수 배열 A의 길이
A = list(map(int, input().split()))  # 정수 배열 A

M = int(input())  # 검사할 정수의 개수
search_numbers = list(map(int, input().split()))  # 검사할 정수들

# A 배열을 정렬하여야 이진 탐색을 사용할 수 있음
A.sort()

# 검사할 정수들을 하나씩 순회하며 이진 탐색을 수행하여 결과 출력
for x in search_numbers:
    result = binary_search(A, x)
    print(result)