Baekjoon Case

[백준 #2108] 통계학 - 파이썬(python)

Scarlett_C 2021. 8. 11. 12:00
728x90

https://www.acmicpc.net/problem/2108

문제만 보고 굉장히 쉽다고 생각했었는데,

내가 몰랐던 또 다른 라이브러리의 함수를 써서 풀었어야 했다..

 

def cnt_of(arr):
    cntlist=list(set(arr))
    cnt=[]
    ver=[]
    for i in cntlist:
        cnt.append(arr.count(i))
    a=max(cnt)
    while a==max(cnt):
            ver.append(cntlist[cnt.index(a)])
            cnt[cnt.index(a)]=0
    if len(ver)==1: return ver[0]
    else: return(ver[1])  

N=int(input())
org=[]
for i in range(N):
    org.append(int(input()))    
org.sort()
print(int(round(sum(org)/N,0)))
print(org[len(org)//2])
print(cnt_of(org))
print(max(org)-min(org))

처음에는 어떤 걸 써야하는지 몰라서.. 

이렇게 따로 함수를 만들어서 했었는데, 계속 시간초과...

답답해 죽는 줄.. 그래서 결국 구글링해서 찾아보니,

Counter 함수를 사용하여서 풀어야 시간 안에 연산이 끝난다고 한다..

 

import sys
from collections import Counter

N=int(sys.stdin.readline())
org=[]
for i in range(N):
    org.append(int(sys.stdin.readline()))    
org.sort()
print(round(sum(org)/N))
print(org[len(org)//2])

cnt_org = Counter(org).most_common()
if len(cnt_org) > 1 and cnt_org[0][1]==cnt_org[1][1]:
    print(cnt_org[1][0])
else:
    print(cnt_org[0][0])
    
print(max(org)-min(org))

훨씬 간단해진 코드..

이래서 라이브러리나 다른 기능들을 많이 알 수록 좋은 것 같다.

이 번에 알았으니 나중에도 쓸 수 있지 않을까..

counter().most_common() 으로 최빈값을 구하고,

배열에 값이 하나이상일때, 첫번째 값과 두번째 값이 동일하면(같은 값이 2개라는 뜻)

두번째 값을 출력하고, 아니면 첫번째 값을 출력

 

아직도 모르는게 너무 많 다.

728x90