개미의 개열시미 프로그래밍

[알고리즘] 백준1920 수 찾기 - 파이썬 본문

알고리즘/이분탐색

[알고리즘] 백준1920 수 찾기 - 파이썬

YunHyeok 2021. 8. 20. 21:16
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

 

 

[풀이 코드]

from bisect import bisect_left, bisect_right
from sys import stdin

n = int(input())
n_list = list(map(int, stdin.readline().split()))
n_list.sort()

m = int(input())
m_list = list(map(int, stdin.readline().split()))


def count_num(array, left, right):
    left_index = bisect_left(n_list, left)
    right_index = bisect_right(n_list, right)
    return right_index - left_index


for i in m_list:
    count = count_num(n_list, i, i)
    if count >= 1:
        print(1)
    else:
        print(0)

- bisect 라이브러리를 활용

- bisect_left(배열, 찾고자 하는 값) : 찾고자 하는 값의 왼쪽 인덱스 값을 리턴합니다. bisect_right는 그 반대!

- bisect_right에서 bisect_left 값을 빼주면 찾고자 하는 값이 몇 개가 들어있는지 알 수 있습니다. 문제에서는 값이 존재하며 여러 개면 1을 출력하라고 했으니 그에 맞게 count변수를 통해 출력했습니다.

 

728x90
반응형
Comments