카테고리 없음

백준 - 수 찾기 1920

gebalza 2023. 2. 28. 16:54

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, 없으면 0을 출력

 

코드 구상

이분탐색

1. 윗 수열을 정렬

2. left, right, pivot((left+right)/2) 값을 설정

3. left값이 right값보다 작거나 같을 동안 반복

  1) 값이 pivot보다 크면 left를 pivot+1로 옮김

  2) 값이 pivot보다 작으면 right를 pivot-1로 옮김

  3) 값이 pivot이랑 같으면 1을 출력하고 탈출하고 count를 1로 설정해줌

4. count가 0일 경우 0을 출력

 

코드

import sys

n = int(input()) #n입력받기
a_list = list(map(int, sys.stdin.readline().split())) #a수열 입력받기
m = int(input()) #m입력받기
m_list = list(map(int,sys.stdin.readline().split())) #m수열 입력받기
a_list.sort() #a수열 정렬

for i in m_list:
    count = 0
    left = 0
    right = n-1
    pivot = int((left + right)/2)
    while (left<=right):
        pivot = int((left + right)/2)
        if(a_list[pivot]<i): #중앙수보다 크면
            left = pivot+1
        elif(a_list[pivot]>i): #중앙수보다 작으면
            right = pivot-1
        else: #피벗이랑 같으면
            print(1)
            count = 1
            break
    if(count==0):
        print(0)

 

 

반응형