10816번은 주어진 값과 비교하여 가지고 있는 숫자 카드의 개수를
출력해야 하는 문제이다.
처음에 이진 탐색을 통해 풀었는데 시간 초과로 실패하였다.
from sys import stdin
from collections import Counter
n = stdin.readline()
n_list = sorted(map(int, stdin.readline().split()))
m = stdin.readline()
m_list = list(map(int, stdin.readline().split()))
def binary(target, n_list):
start, end = 0, len(n_list) - 1
while(start <= end):
mid = (start + end) // 2
if target < n_list[mid]:
end = mid - 1
elif target > n_list[mid]:
start = mid + 1
else:
return Counter(n_list).get(target)
return 0
if __name__ == "__main__":
for i in range(len(m_list)):
print(binary(m_list[i], n_list),end=' ')
그래서 파이썬의 내장 함수인 Counter를 사용하여 값을 출력했다.
Counter는 딕셔너리 형태로 저장이 되기 때문에 빠르게 값을 찾을 수 있다.
from sys import stdin
from collections import Counter
n = stdin.readline()
n_list = sorted(map(int, stdin.readline().split()))
m = stdin.readline()
m_list = list(map(int, stdin.readline().split()))
count = Counter(n_list)
if __name__ == "__main__":
for i in range(len(m_list)):
if(m_list[i] in count):
print(count[m_list[i]], end=' ')
else:
print(0, end='')
'백준 알고리즘 > 이진탐색' 카테고리의 다른 글
[백준 알고리즘] 2512번 예산 - Python (0) | 2022.03.11 |
---|---|
[백준 알고리즘] 10815번 숫자 카드 - Python (0) | 2022.03.10 |
[백준 알고리즘] 1920번 수 찾기 - Python (0) | 2022.03.09 |
[백준 알고리즘] 2805번 나무 자르기 - C (0) | 2021.12.08 |