sm 기술 블로그
93. 10816(숫자 카드2) 본문
import sys
input = sys.stdin.readline
input()
haveCard = list(map(int, input().split()))
input()
compareCard = list(map(int, input().split()))
cardMap = {}
for val in haveCard:
if val in cardMap:
cardMap[val] += 1
else:
cardMap[val] = 1
for val in compareCard:
try:
print(cardMap[val], end=" ")
except:
print("0", end=" ")
문제 요약
상근이가 가지고 있는 각 카드의 갯수를 출력해라.(범위가 매우 크다)
해설
데이터 사전에 값을 count로 주었을 때 시간초과가 발생하였다.
그 이유는 똑같은 값이 나와도 똑같이 counter 하여 500000이라는 숫자에서는 무의미한 반복이 시간초과를 만들 수 밖에 없었다.
따라서 counter가 아닌 값이 있는 경우 +1씩 증가시켜주었다.
반복은 전에 풀었던 문제와 똑같이 진행하였다.
다음은 파이썬에서 제공하는 Counter를 이용하여 문제를 풀었다.
from collections import Counter
import sys
input = sys.stdin.readline
input()
haveCard = list(map(int, input().split()))
input()
compareCard = list(map(int, input().split()))
cardCnt = Counter(haveCard)
print(' '.join(f'{cardCnt[i]}' if i in cardCnt else "0" for i in compareCard))
Counter는 데이터의 개수를 셀 때 사용하는 클래스이다.
f'{cardCnt[i]}'
이것은 fomatting 인데, 우리가 출력을
print("{}",a)
와 같이 많이 쓰는데, 위와 같이 바로 변수이름을 불러서 쓰는 방법도 있다.
'문제 > 백준_파이썬' 카테고리의 다른 글
95. 1269(대칭 차집합) (0) | 2022.06.21 |
---|---|
94. 1764(듣보잡) (0) | 2022.06.20 |
92. 1620(나는야 포켓몬 마스터 이다솜) (0) | 2022.06.19 |
91. 14425 (문자열 집합) (0) | 2022.06.19 |
90. 10815(숫자카드) (0) | 2022.06.19 |
Comments