[백준] 10816번 숫자 카드 2(python)

마뇽미뇽·2025년 7월 2일
0

알고리즘 문제풀이

목록 보기
142/165

1. 문제


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

2. 풀이

단순 존재 위치만을 파악하는 경우라면 set을 사용해도 되었지만 set을 사용하면 정렬이 되기 때문에 같은 인덱스의 갯수를 파악할 수가 없었고 그로 인해 list를 사용하게 되면 시간초과가 나는 문제점이 있었다.

📚 Counter 란?

  • 빠르게 객체의 갯수를 셀 수 있도록 해주는 Collection 내장함수이다.
Tally occurrences of words in a list
cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
    cnt[word] += 1
cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

따라서 counter 을 사용해 cardA에서의 갯수를 받은 후 해당 cardB에 값을 대입한다.

https://docs.python.org/ko/3.13/library/collections.html#counter-objects

3. 코드

최종코드

import sys
from collections import Counter

m = int(sys.stdin.readline())
cardA = list(map(int, sys.stdin.readline().split()))
n = int(sys.stdin.readline())
cardB = list(map(int, sys.stdin.readline().split()))

counter = Counter(cardA)
for i in range(n):
    cardB[i] = counter[cardB[i]]
print(*cardB)

초기코드(시간초과)

import sys

m = int(sys.stdin.readline())
cardA = list(map(int, sys.stdin.readline().split()))
n = int(sys.stdin.readline())
cardB = list(map(int, sys.stdin.readline().split()))
answer = [0] * n
for i in range(len(cardB)):
    count = cardA.count(cardB[i])
    answer[i] += count
print(*answer)```
profile
Que sera, sera

0개의 댓글