[BOJ-#10816] 숫자 카드2

신지·2024년 3월 28일
0

BOJ

목록 보기
15/15

문제

문제 링크
숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 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개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 몇 개 가지고 있는지를 공백으로 구분해 출력한다.


Code

Github 링크

import sys

input = sys.stdin.readline

N = int(input().rstrip())
N_list = list(map(int, input().rstrip().split()))
N_list.sort()

M = int(input().rstrip())
M_list = list(map(int, input().rstrip().split()))

check = {}

for i in N_list :
    if i in check :     # 이미 있으면 1 추가
        check[i] += 1
    else :      # 없으면 1 생성 
        check[i] = 1

for j in M_list :
    if j in check :
        print(check[j], end = " ")
    else :
        print(0, end = " ")

코드 설명

import sys

input = sys.stdin.readline

N = int(input().rstrip())
N_list = list(map(int, input().rstrip().split()))
N_list.sort()

M = int(input().rstrip())
M_list = list(map(int, input().rstrip().split()))

빠른 입력을 받을 수 있도록 input을 선언하고 숫자 카드의 개수와 숫자 카드 내역, 정수의 개수와 정수 내역을 받는다.


check = {}

for i in N_list :
    if i in check :     # 이미 있으면 1 추가
        check[i] += 1
    else :      # 없으면 1 생성 
        check[i] = 1

for j in M_list :
    if j in check :
        print(check[j], end = " ")
    else :
        print(0, end = " ")

카운트를 위해 check라는 딕셔너리를 생성한다. 숫자 카드들의 개수를 먼저 세기 위해서 for문을 돌린다. 이때 딕셔너리에 없는 key였으면 새로운 value를 생성해야 하기 때문에 1을 넣고 이미 있는 key라면 value에 1을 추가한다.

출력을 위해 M이 몇 개 있는지 딕셔너리의 key로 검색한다. 이때 key에 없다면 카운트되지 않은 것이기 때문에 0을 출력한다.


리뷰

무려 7개월만에 풀어본 알고리즘 문제... 라서 실버 4인데도 헤맸다. 실화? 머리 쓰기 귀찮다고 또 무식하게 for문 돌려서 푼 덕에 시간 초과도 나고, 이분탐색 했는데도 자꾸 시간 초과 나서 검색했더니 다들 딕셔너리로 푼 거 같아서 딕셔너리 이용했다. 딕셔너리는 잘 안 찾게 되는데 이렇게 0개가 있을 수도 있는 경우에는 딕셔너리 쓰는 것도 괜찮은 것 같다. 앞으로 알고리즘 열심히 해야지...

0개의 댓글

Powered by GraphCDN, the GraphQL CDN