알고리즘

[백준] 10816 숫자 카드 2 - 실버4

swanzzz 2025. 3. 17. 23:29
반응형

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

 

 

문제는 어렵지 않습니다.

 

N 과 N개의 갯수를 가진 카드덱이 있습니다.

또 M과 M개의 갯수를 가진 카드덱이 있습니다.

 

이 M은 상근이가 가지고 있는 카드의 갯수와 그 카드들 입니다

 

N은 상근이가 가지고 있는 카드를 찾으려는 카드덱 입니다.

 

즉, 상근이의 M 카드덱 중 N에 카드가 있다면 그 갯수를 세어 출력하는 문제입니다.

 

단순히 조건만 본다면 count 함수를 이용해 전체 배열 탐색을 실시할 수 도 있지만 그렇기에는 조건이 1부터 500,000 이라 시간초과가 발생할 것 같습니다.

 

따라서 제가 생각한 방법은 다음과 같습니다.

 

1. N개의 카드덱의 갯수를 딕셔너리를 이용해 생성해 줍니다.

 

2. 생성한 딕셔너리를 이용해 해당 수가 카드덱에 있다면 +1 없다면 1로 생성해 줍니다.

 

3. 그 다음 M번 반복을 실시하며 해당 숫자가 해당 딕셔너리에 있다면 그 숫자를 출력하고 없다면 0을 출력해 줍니다.


 

import sys
input = sys.stdin.readline

N = int(input())
cards = list(map(int, input().split()))
M = int(input())
my_cards = list(map(int, input().split()))

answer = {}

for card in cards:
    if card in answer:
        answer[card] += 1
    else:
        answer[card] = 1

for m_card in my_cards:
    if m_card in answer:
        print(answer[m_card], end=" ")
    else:
        print(0, end=" ")

 

answer 딕셔너리를 생성하고 N개의 카드더미만큼 반복하며 해당 카드가 answer 딕셔너리에 있다면 +1 을 해주고 없다면 1로 해당 숫자의 갯수를 카운트해줍니다.

 

그 후 M번 정답 딕셔너리를 전체 탐색을 실시하며 해당 숫자가 있다면 그 숫자의 갯수를 출력하고 end=" " 를 이용해 공백을 추가해 한줄로 출력해 줍니다.

 

없다면 0을 출력하고 공백을 추가해 한 줄로 출력해 줍니다.


[결과]

 

반응형