룰루코딩

백준 2108 통계학 본문

백준

백준 2108 통계학

rulru01 2024. 11. 22. 01:04

문제


솔루션

import sys
input=sys.stdin.readline

N = int(input())
li=[]
dic=dict()

for _ in range(N):
    num=int(input())
    li.append(num)
    if num in dic:
        dic[num]+=1
    else:
        dic[num]=1


print(round(sum(li)/N))
print(sorted(li)[N//2])

max_freq = 0
maxf=[]
for key,value in dic.items():
    if value>max_freq:
        max_freq=value
        maxf=[key]
    elif value==max_freq:
        maxf.append(key)

if len(maxf)>1:
    maxf.sort()
    print(maxf[1])
else:
    print(maxf[0])

print(max(li)-min(li))

깨달은점

엄청 쉬워보였는데 최빈값부분이 조금 까다로웠다.

N = int(input())
li=[]
dic=dict()

for _ in range(N):
    num=int(input())
    li.append(num)
    if num in dic:
        dic[num]+=1
    else:
        dic[num]=1


print(round(sum(li)/N))
print(sorted(li)[N//2])

sort_dic = dict(sorted(dic.items(), key=lambda x: x[1],reverse=True))
keys = list(sort_dic.keys())
values = list(sort_dic.values())
if values[0]==values[1]:
    print(keys[1])
else:
    print(max(dic.keys()))

print(max(li)-min(li))

최빈값을 리스트를 새로 안만들고 적용하려다가 너무 어렵게 가버렸다... 그리고 오답은 계속뜨고..

그래서 최빈값 부분을

max_freq = 0
maxf=[]
for key,value in dic.items():
    if value>max_freq:
        max_freq=value
        maxf=[key]
    elif value==max_freq:
        maxf.append(key)

if len(maxf)>1:
    maxf.sort()
    print(maxf[1])
else:
    print(maxf[0])

이렇게 풀었는데 이것도 너무 복잡하다.

더 쉬운 풀이가 있을거 같은데 너무 길어졌다..

 

max_freq = max(dic.values())  # 최대 빈도수
modes = [key for key, value in dic.items() if value == max_freq]  # 최대 빈도수에 해당하는 키들

if len(modes) > 1:  # 최빈값이 여러 개인 경우
    print(sorted(modes)[1])  # 두 번째로 작은 값 출력
else:  # 유일한 최빈값
    print(modes[0])

이게 그나마 제일 덜 복잡같기도하고..

'백준' 카테고리의 다른 글

백준 9095 1, 2, 3 더하기  (2) 2025.01.04
백준 1927 최소 힙  (2) 2025.01.03
백준 4673 셀프 넘버  (0) 2024.11.19
백준 2596 비밀편지  (0) 2024.11.12
백준 10820 문자열 분석  (0) 2024.11.11