알고리즘
[백준] 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을 출력하고 공백을 추가해 한 줄로 출력해 줍니다.
[결과]
반응형