[BOJ / Python] 10816 숫자 카드 2

도니·2023년 4월 20일
0

BOJ / Python

목록 보기
97/104
post-thumbnail

문제

백준 10816 숫자 카드 2

코드

import sys

n = int(sys.stdin.readline())
cards = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
check = list(map(int, sys.stdin.readline() .split()))

count = {}
for x in cards:
    if x in count:
        count[x] += 1
    else:
        count[x] = 1

for x in check:
    if x in count:
        print(count.get(x), end=" ")
    else:
        print(0, end=" ")

코드 설명

💡 시간 초과를 주의할 것!

해당 문제도 입력값의 범위가 굉장히 넓기 때문에 시간 초과의 위험이 있다.

for i in range(m):
	print(cards.count(check[i]), end=" ")
    

위의 코드로 예제를 돌려도 PyCharm에서는 맞다고 나오지만, 입력값이 많아지면 시간 초과의 문제가 발생할 수 있다. 따라서 숫자마다 cards 리스트 전체를 검사하며 숫자를 세는 방식은 비효율적이다.

그래서 필자는 cards 리스트를 한 번만 돌면서 등장하는 횟수를 딕셔너리에 저장하는 방식을 이용했다.
만약 cards에 들어있는 숫자가 count 딕셔너리에 있으면 그 값을 1 더 큰 값으로 갱신하고, 없다면 value 값을 1로 하여 딕션러ㅣ에 넣어준다.

출력할 때도 check리스트에 들어있는 숫자가 count 딕셔너리에 있으면 그 숫자에 매칭되어있는 value값을 출력하고, 없으면 0을 출력하도록 한다.

profile
안녕하세요, 🌱새싹개발자 도니💡입니다!

0개의 댓글

관련 채용 정보