https://www.acmicpc.net/problem/2108
- 시간 초과
1번째 코드에서.count
때문에 시간 초과가 발생하였다.
→ 3번째 블록의 딕셔너리 dict[n] = 1로 변경해주고,
→ count 대신 현재 원소 값이 이전 원소 값과 동일하다면 dict[i] value값에 + 1
→ 시간 초과 해결 (success)
# mine (시간 초과)
import sys
N = int(sys.stdin.readline())
nums = []
dict = {}
for _ in range(N):
n = int(sys.stdin.readline())
nums.append(n)
if n not in dict:
dict[n] = 0
n = len(nums)
sp = sum(nums) / n
nums.sort()
mid = nums[n//2]
for i in nums:
dict[i] = nums.count(i) # ✅
m_key = [k for k, v in dict.items() if max(dict.values()) == v] # 최대 value 값에 대한 key 값 반환
if len(m_key) == 1: # 최빈값
mode = m_key[0]
else: # 최빈값이 여러 개일 때, 2번째로 작은 값 출력
m_key.sort()
mode = m_key[1]
r = abs(max(nums) - min(nums))
print(round(sp), mid, mode, r, sep='\n')
# mine (수정, success)
import sys
N = int(sys.stdin.readline())
nums = []
dict = {}
for _ in range(N):
n = int(sys.stdin.readline())
nums.append(n)
if n not in dict:
dict[n] = 1 # ✅
n = len(nums)
sp = sum(nums) / n
nums.sort()
mid = nums[n//2]
# 최빈값
for i in range(1, len(nums)):
if nums[i-1] == nums[i]: # ✅
dict[nums[i]] += 1
m_key = [k for k, v in dict.items() if max(dict.values()) == v] # 최대 value 값에 대한 key 값 반환
if len(m_key) == 1: # 최빈값
mode = m_key[0]
else: # 최빈값이 여러 개일 때, 2번째로 작은 값 출력
m_key.sort()
mode = m_key[1]
r = abs(max(nums) - min(nums))
print(round(sp), mid, mode, r, sep='\n')
개수를 체크할 때 Counter
라이브러리 사용
from collections import Counter
s = [1,4,2,2,4,1,3,6,7]
cs = Counter(s)
print(cs)
print(cs.most_common())
print(cs.most_common(1))
# 가장 많은 것부터 1개 출력