본문 바로가기
알고리즘/BOJ

[BOJ] 10816. 숫자카드 2

by ㅣlㅣl 2022. 9. 7.

문제

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

 

10816번: 숫자 카드 2

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

www.acmicpc.net

 

 


 

주요 아이디어

처음에 정렬하는 방법을 생각했는데 그냥 딕셔너리가 더 편한것 같다 (파이썬 한정)

주어진 숫자카드 리스트의 개수를 딕셔너리화하고, 찾아야 하는 num_list 반복문 돌리면서 딕셔너리에서 개수를 가져온다.

매번 비교하며 카운트하는 방법은 시간 초과 뜰 가능성이 높다!

 


 

코드 구현 (Python 3)

더보기

 

N = int(input()) # 숫자카드 개수

card_list = [] # 상근이가 가진 숫자카드 리스트

tmp = input()
card_list = tmp.split()

M = int(input())
tmp = input()
num_list = tmp.split() # number list

# 상근이 dict 생성
card_dict = {}
for card in card_list:
    if card not in card_dict.keys():
        card_dict[card] = 1
    else:
        card_dict[card] += 1

for num in num_list:
    if num not in card_dict.keys():
        print('0 ', end='')
    else:
        print(str(card_dict[num]) + ' ', end='')

 

 

 


 

제출 결과


 

코드 개선 방안

 

  • 딕셔너리 이외의 자료형 (ex. 리스트 등) 만을 사용해서 풀어보자

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 10845. 큐  (0) 2022.09.07
[BOJ] 10828. 스택  (0) 2022.09.07
[BOJ] 10814. 나이순 정렬  (0) 2022.09.07
[BOJ] 10250. ACM 호텔  (0) 2022.09.07
[BOJ] 09012. 괄호  (0) 2022.09.07