![[백준] 32953번 - 회상, python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FTUcwD%2FbtsMXpS0POQ%2FAAAAAAAAAAAAAAAAAAAAAP-avrrOLe8g7-QxcQT_kEtdWMbRYPdSjKb7qmh50f1A%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DbjMs95kevh6KBn8wb8VjyIHDMFw%253D)
[백준] 32953번 - 회상, pythonCoding/Python2025. 3. 24. 18:31
Table of Contents
문제
백준 32953번 '회상' 문제는 각 사람의 기억 속에 있는 숫자들을 종합해,
m명 이상이 기억하고 있는 숫자의 개수를 세는 문제다.
처음에는 딕셔너리를 이용해 풀었으나 시간 초과가 발생했고, 이후 list와 set 조합으로 해결했다.
오답코드
n,m = map(int, input().split(' '))
dic = {}
result = 0
for i in range(n) :
num = int(input())
li = input().split(' ')
for j in range(num) :
if li[j] in dic :
dic[li[j]] += 1
else :
dic[li[j]] = 1
for key, value in dic.items() :
if value >= m :
result +=1
print(result)
문제점
- li[j] in dic 탐색에서 시간복잡도 증가
- 반복적으로 탐색 & 갱신하면서 누적 시간 증가
- 결국 시간초과 발생
정코드
n,m = map(int, input().split(' '))
array = []
set = set()
sum = 0
for i in range(n) :
num = int(input())
array1 = list(map(int,input().split(' ')))
array += array1
set.update(array1)
for i in set :
if array.count(i) >= m :
sum += 1
print(sum)
설명
리스트와 집합(set)을 함께 활용하여 불필요한 중복 탐색을 줄이고,
시간복잡도를 효율적으로 관리함으로써 통과할 수 있었다.
=> 여기서 딕셔너리 사용시 시간복잡도 O(1)인데, 딕셔너리 사용하면 O(N)으로 다름
반응형
'Coding > Python' 카테고리의 다른 글
[백준 33675번] L-트로미노 타일링 (python) (0) | 2025.04.16 |
---|---|
[백준 33674] 하늘에서 떨어지는 N개의 별, 파이썬 (0) | 2025.04.04 |
[python] A, B = input().split()이 가능한 이유 (패킹,언패킹) (0) | 2025.03.06 |
[알고리즘] 파이썬 알고리즘 주의 사항 (0) | 2022.08.13 |
[파이썬] 리스트 원소 랜덤 출력하는 법 (0) | 2022.05.11 |
[백준 -파이썬] 10171번 고양이 출력하시오 (\\를 조심하자) (0) | 2022.04.15 |
@염염 :: 왕감자
공부하고 정리하는 기록모음