본문 바로가기
백준알고리즘/이분탐색

(Python/🥈4)백준알고리즘 1920번: 수 찾기

by windy7271 2022. 9. 1.
728x90
반응형

문제 출처:https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

풀이1: 이분탐색 안 쓰고 푸는법

import sys

n = int(input())
N = set(map(int,input().split()))		# list 로 받으면 시간초과가 나기 때문에 set으로 받음
m = int(input())
M = map(int,input().split())

for num in M:
    print(1) if num in N else print(0)

풀이2: 이분탐색 사용

def binary(i, N, start, end):
    if start > end:
        return 0
    m = (start+end)//2              # 중앙 값 = m
    if i == N[m]:                   # i가 중앙에 중앙값이면 
        return 1                    # 그대로 리턴
    elif i < N[m]:                  # 작으면
        return binary(i, N, start, m-1) # 큰부분 다 자르고 다시시작
    else:                           # 아니면
        return binary(i, N, m+1, end)   # 작은부분 다 자르고 다시시작

for i in M:
    start = 0
    end = len(N)-1
    print(binary(i, N, start, end)) # 리스트 M 중에 1개씩 가져와서 넘겨줌
반응형

댓글