😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

CLASS 2 / [10816] 숫자카드2 / 파이썬 (딕셔너리의 위력)

또방91 2022. 1. 31. 02:56
728x90

 

 

 

 

✏️ 문제 링크

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

 

10816번: 숫자 카드 2

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

www.acmicpc.net


실패....ㅠㅠ (시간초과)

n= int(input()) #상근이가 가지고 있는 숫자 카드의 개수
cards= list(map(int,input().split())) #숫자 카드에 적혀있는 정수
m= int(input()) 
test= list(map(int,input().split()))


for i in test:
    result = cards.count(i)
    print(result,end=" ")

정답은 ??

n= int(input()) #상근이가 가지고 있는 숫자 카드의 개수
cards= list(map(int,input().split())) #숫자 카드에 적혀있는 정수
m= int(input()) 
test= list(map(int,input().split()))

dic= {}

for i in cards:
    dic[i] = dic.get(i, 0) + 1

for i in test:
    if i in dic: print(dic[i], end=" ")
    else: print(0, end=" ")

💯 풀이 과정

* input을 stdin.readline으로 해도 계속시간초과가 나서 방법이 없을까 하다가 딕셔너리로하면 빠르다는 남편님의 조언을 듣고서 풀이를 하게 되었다.

 

1) dic이라는 딕셔너리를 만든다.

2) 상근이가 갖고 있는 카드를 dic의 key값으로 해준다.

3) 딕셔너리 value는 get( )함수를 써서 에서 값이 있다면 값 출력하고 / 없으면 기본값을 0으로 지정해준다.

--> 즉, 값이 있다면 +1씩 넣어주게 된다. 

4) 나중에 test해야할 것은 반복문을 돌리고, 딕셔너리안에 있으면 value 도출, 없으면 0을 출력하게 한다.


😎 오늘의 한줄평

딕셔너리 함수에 대해 열심히 공부해두자! 

 

 

 

728x90