image

Silver Ⅳ 🔗1920. 수 찾기

📝문제 요약

문제

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을 출력한다.


✏️문제 풀이

  • 입력
    • n을 입력
    • n개의 정수를 저장할 a 리스트
    • m 입력
    • m개의 정수를 저장할 x 리스트
  • 이진 탐색을 위해 리스트 a 오름차순 정렬
  • 이진 탐색 함수 binary_search() 선언
    • 탐색 범위의 시작(0)과 끝(len(arr) - 1) 인덱스 left, right
    • left 인덱스가 right보다 커질때까지 반복
      • 현재 탐색 범위의 중간 인덱스(처음과 끝을 더하여 2로 나눈 몫)
      • 찾는 숫자를 발견한 경우 1을 반환
      • 중간값이 찾는 숫자보다 작은 경우, 오른쪽 범위 탐색(+1)
      • 중간값이 찾는 숫자보다 큰 경우, 왼쪽 범위 탐색(-1)
    • 숫자를 찾지 못한 경우 0을 반환
  • x를 순회하여 이진탐색 수행

코드와 함께 보는 풀이

# n을 입력
n = int(input())
# n개의 정수를 저장할 a 리스트
a = list(map(int, input().split()))

# m 입력
m = int(input())
# m개의 정수를 저장할 x 리스트
x = list(map(int, input().split()))

# 이진 탐색을 위해 리스트 a 오름차순 정렬
a.sort()

# 이진 탐색 함수 선언
def binary_search(target, arr):
		# 탐색 범위의 시작과 끝 인덱스
    left, right = 0, len(arr) - 1
    
    # left 인덱스가 right보다 커질때까지 반복
    while left <= right:
		    # 현재 탐색 범위의 중간 인덱스
        mid = (left + right) // 2
        # 찾는 숫자를 발견한 경우 1을 반환
        if arr[mid] == target:
            return 1
        # 중간값이 찾는 숫자보다 작은 경우, 오른쪽 범위 탐색
        elif arr[mid] < target:
            left = mid + 1
        # 중간값이 찾는 숫자보다 큰 경우, 왼쪽 범위 탐색
        else:
            right = mid - 1
    # 숫자를 찾지 못한 경우 0을 반환
    return 0

# x를 순회하여 이진탐색 수행
for i in x:
    print(binary_search(i, a))


💯제출 코드

n = int(input())
a = list(map(int, input().split()))

m = int(input())
x = list(map(int, input().split()))

a.sort()

def binary_search(target, arr):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return 1
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return 0

for i in x:
    print(binary_search(i, a))

댓글남기기