[백준 10816 파이썬] 숫자 카드 2

일단 해볼게·2023년 4월 28일
0

백준

목록 보기
118/132

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

import sys
input = sys.stdin.readline

n = int(input().rstrip())
n_card = input().rstrip().split()
m = int(input().rstrip())
m_card = input().rstrip().split()

sangun_card = {}

for card in n_card:
    if card in sangun_card:
        sangun_card[card] += 1
    else:
        sangun_card[card] = 1

answer = []

for num_card in m_card:
    answer.append(sangun_card.get(num_card, 0)) # get은 값이 key가 있으면 value를 출력하고 key가 없으면 디폴트 값으로 두번째 인자를 출력한다.

print(*answer) # 리스트 내의 값 출력

딕셔너리의 get은 값이 key가 있으면 value를 출력하고 key가 없으면 디폴트 값으로 두번째 인자를 출력한다.

이분탐색 풀이

from sys import stdin
n = stdin.readline().rstrip()
card = list(map(int,stdin.readline().split()))
m = stdin.readline().rstrip()
test = list(map(int,stdin.readline().split()))

card.sort() # 이분 탐색을 위한 정렬

def binary_search(array, target, start, end):
    if start > end:
        return None
    mid = (start + end) // 2
    if array[mid] == target:
        return array[start:end+1].count(target)
    elif array[mid] < target:
        return binary_search(array, target, mid+1, end)
    else:
        return binary_search(array, target, start, mid-1)

for i in range(len(test)):
    a = binary_search(card, test[i], 0, len(card)-1)
    if a is not None:
        print(a, end=' ')
    else:
        print(0, end=' ')
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글