본문 바로가기
코딩테스트/백준

[Python] BOJ 10816 - 숫자 카드 2

by Ssubini 2022. 4. 13.

https://www.acmicpc.net/problem/10816

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

[2022.02.17]

- 이분탐색으로 해결하면 정답 나옴.

 

N = int(input())
numbers = list(map(int, input().split()))
M = int(input())
task = list(map(int, input().split()))

new_dict = {}
for n in numbers:
    if n not in new_dict:
        new_dict[n] = 1
    else:
        new_dict[n] += 1

numbers.sort()


def binary(m):
    l = 0
    r = len(numbers) - 1
    while 1:
        m = (l + r) // 2
        if numbers[m] == t:
            return new_dict[t]
        elif numbers[m] > t:
            r = m - 1
        else:
            l = m + 1

        if l > r:
            return 0

cnt = []
for t in task:
    cnt.append(binary(t))
print(*cnt)

'코딩테스트 > 백준' 카테고리의 다른 글

[Python] BOJ 1541 - 잃어버린 괄호  (0) 2022.04.13
[Python] BOJ 1206 - 보물  (0) 2022.04.13
[Python] BOJ 1654 - 나무자르기  (0) 2022.04.13
[C++/덱] BOJ 5430 AC  (0) 2021.06.22
[C++/큐] BOJ 2164 카드2  (0) 2021.06.15

댓글