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

그린·2023년 3월 14일
0

백준

목록 보기
22/44
post-thumbnail

[백준] 10816번 숫자 카드 2


✔️문제

분류

이분 탐색(binary_search), 자료 구조(data_structures), 해시를 사용한 집합과 맵(hash_set), 정렬(sorting)

문제 설명

숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다.

셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다.

출력

첫째 줄에 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 몇 개 가지고 있는지를 공백으로 구분해 출력한다.


✔️풀이

내 풀이

n = int(input())
card = {}
card_arr = map(int, input().split())
for c in card_arr:
  if c not in card:
    card[c] = 1
  else:
    card[c] += 1
m = int(input())
find = map(int, input().split())
for f in find:
  try:
    print(card[f], end=' ')
  except:
    print(0, end=' ')

문제를 보자마다 딕셔너리를 사용해야겠다고 생각했다.

  1. card_arr에 카드를 넣고 카드값:개수로 card 딕셔너리`를 만든다.
  2. 두번째 받은 카드들을 돌면서 딕셔너리에 없으면 0을 출력하고 있다면 딕셔너리의 키값을 이용해 개수를 출력한다.

다른 사람의 풀이

from sys import stdin
from collections import Counter
_ = stdin.readline()
N = stdin.readline().split()
_ = stdin.readline()
M = stdin.readline().split()

C = Counter(N)
print(' '.join(f'{C[m]}' if m in C else '0' for m in M))

파이썬의 내장 함수를 사용해서 풀이한 코드이다.
1. from collections import Counter 를 통해서 Counter 메소드를 가져온다.
2. 리스트를 Counter에 넣으면 리스트의 요소들의 개수를 센 dictionary 자료형이 출력된다.

0개의 댓글