DonHurry

[Python] λ°±μ€€ 1920번 - 수 μ°ΎκΈ° λ³Έλ¬Έ

Problem Solving

[Python] λ°±μ€€ 1920번 - 수 μ°ΎκΈ°

_도녁 2022. 11. 20. 23:22

πŸ“– λ¬Έμ œ

 

1920번: 수 찾기

첫째 쀄에 μžμ—°μˆ˜ N(1 ≤ N ≤ 100,000)이 μ£Όμ–΄μ§„λ‹€. λ‹€μŒ μ€„μ—λŠ” N개의 μ •μˆ˜ A[1], A[2], …, A[N]이 μ£Όμ–΄μ§„λ‹€. λ‹€μŒ μ€„μ—λŠ” M(1 ≤ M ≤ 100,000)이 μ£Όμ–΄μ§„λ‹€. λ‹€μŒ μ€„μ—λŠ” M개의 μˆ˜λ“€μ΄ μ£Όμ–΄μ§€λŠ”λ°, 이 μˆ˜λ“€

www.acmicpc.net

 

πŸ”Ž ν’€μ΄

이뢄 탐색을 μ΄μš©ν•˜λŠ” κ°€μž₯ 기초적인 λ¬Έμ œμž…λ‹ˆλ‹€. λ‹€λ₯Έ 아이디어 ν•„μš” 없이 이뢄 탐색을 μ§œλŠ” μ½”λ“œλ§Œ μ•Œκ³  있으면 해결이 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ•„λž˜ μ½”λ“œμ—μ„œ μ£Όλͺ©ν•΄μ•Όν•  점은 mid 값을 계산할 λ•Œ λ‹¨μˆœνžˆ (left + right) // 2 둜 ν•˜μ§€ μ•Šμ•˜λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 사싀 νŒŒμ΄μ¬μ—μ„œλŠ” 문제될 일이 μ—†μ§€λ§Œ, λ‹€λ₯Έ μ–Έμ–΄μ—μ„œλŠ” left + right의 값이 μžλ£Œν˜•μ˜ μ΅œλŒ€ μ €μž₯값을 λ„˜μ–΄κ°ˆ 경우 μ˜€λ²„ν”Œλ‘œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ•Œλ¬Έμ— 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μš°νšŒν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

 

πŸ’» μ½”λ“œ

import sys
input = sys.stdin.readline


def binary_search(num):
    left, right = 0, N-1
    while left <= right:
    	    # μ˜€λ²„ν”Œλ‘œμš° λ°©μ§€ (νŒŒμ΄μ¬μ€ 상관 X)
            mid = left + (right - left)//2
            if arr[mid] > num:
                right = mid - 1
            elif arr[mid] < num:
                left = mid + 1
            else:
            	# 숫자λ₯Ό 찾으면 1 λ°˜ν™˜
                return 1
    # 숫자λ₯Ό μ°Ύμ§€ λͺ»ν•˜λ©΄ 0 λ°˜ν™˜
    return 0


N = int(input())
# 숫자 λ°°μ—΄
arr = [int(x) for x in input().split()]
M = int(input())
# 찾고자 ν•˜λŠ” 숫자 λ°°μ—΄
nums = [int(x) for x in input().split()]
# 숫자 λ°°μ—΄ μ •λ ¬
arr.sort()
for num in nums:
    print(binary_search(num))