sm 기술 블로그

93. 10816(숫자 카드2) 본문

문제/백준_파이썬

93. 10816(숫자 카드2)

sm_hope 2022. 6. 19. 22:44
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