-
10816 숫자 카드 2알고리즘/BOJ 2024. 3. 26. 00:15
https://www.acmicpc.net/problem/10816
아이디어
1. N, M 숫자가 매우 큼 => 단순히 for문을 돌면 시간 초과
2. 시간 복잡도를 줄여야 하고 O(n)에서 O(logn)으로 줄이기 위해 이분 탐색 알고리즘 사용
N = int(input()) cards = list(map(int, input().split(" "))) M = int(input()) targets = list(map(int, input().split(" "))) sorted_cards = sorted(cards) card_count = {} for card in cards: if card not in card_count.keys(): card_count[card] = 1 else: card_count[card] += 1 def search(aim, start, end): if start > end: return 0 mid = (start + end) // 2 if aim == sorted_cards[mid]: return card_count[sorted_cards[mid]] elif aim > sorted_cards[mid]: return search(aim, mid + 1, end) else: return search(aim, start, mid - 1) res = [] for target in targets: res.append(str(search(target, 0, len(cards) - 1))) print(" ".join(res).strip())
'알고리즘 > BOJ' 카테고리의 다른 글
10815 숫자 카드 (0) 2024.03.30 2805번 아기 상어 (0) 2024.03.28 [BOJ]17142번 연구소3 (0) 2020.08.17 [BOJ]17143번 낚시왕 (0) 2020.08.17 [BOJ]16235번 나무 제태크 (0) 2020.08.16