• Home
  • About
    • Awesome soubii photo

      Awesome soubii

      초보 개발자의 공부정리용 블로그입니다. 잘못 쓰여진게 있다면 친절히 알려주세요 :)

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

[Algorithm]2108 통계학 By Python3

18 Aug 2020

Reading time ~1 minute

오늘의 문제

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

다른 것은 어렵지 않으나 최빈값을 구하는 것으로 제일 고민되었던 문제였다.

포인트 쳌쳌

  1. 산술평균은 총 합계를 구한 후 정수의 개수(n)으로 나눈다.
  2. 중앙값은 오름차순 정렬 후 중앙에 위차한 인덱스로 접근한다.
  3. 최빈값 은 Counter클래스를 사용해보았다.
  4. 범위 는 2번에서 이미 정렬되었으므로 단순히 최대값(max함수 사용)에서 최소값(min함수 사용)을 빼준다.

Counter.most_common() 사용하기

먼저, Counter쿨래스란 파이썬 Collections 모듈이 제공하는 편리하고 빠른 집계를 지원하기 위한 도구이다. 딕셔너리 개체를 계산하기 위한 하위 클래스로서 키값(key)에 요소가 저장되고, 그 요소의 개수가 해당 키의 값(value)으로 저장되는 컬렉션.

객체 생성시에는 문자열, 리스트, 딕셔너리 모두 이용될 수 있다.

c = Counter()
c = Counter('gimsubin')
c = Counter({'red': 4, 'blue': 2}) 
c = Counter(['eggs', 'ham'])

몇개의 메소드들이 있지만 이 문제에서 다룬 메소드 most_common 정리하겠다.

Counter에 대한 더 많은 정보는 참고문서를 확인해주세요!

most_common([n])

매개변수 n 없이 most_common() 형태로 사용한다면,
모든 (원소 ,그 원소의 빈도값) 튜플 쌍울 원소의 내림차순대로 반환해준다.

c = Counter('ggeeeegooooooooodaab').most_common()
print(c)
#출력: [('o', 9), ('e', 4), ('g', 3), ('a', 2), ('d', 1), ('b', 1)]

n을 써준다면 n개의 원소튜플 쌍들을 내림차순으로 반환한다.

c = Counter('ggeeeegooooooooodaab').most_common(2) 
print(c)
#출력: [('o', 9), ('e', 4)] 

아래는 채점에 통과한 코드이다.

풀이 코드

import sys
from collections import Counter

n = int(sys.stdin.readline()) #입력: 홀수인 정수 최소 1개, 최대 50만개
num = [] #정수 리스트
sum = 0

#총 합계 구하기
for i in range(n):
    now = int(sys.stdin.readline()) #-4000 < now < 4000
    num.append(now)  
    sum += now

#중앙값 찾기
num.sort()
if len(num) % 2 == 0:
    mid = len(num) // 2 - 1
else:
    mid = len(num) // 2

#최빈값 찾기
fre = 0
cnt = Counter(num).most_common()
if len(cnt) != 1:
    if cnt[0][1] == cnt[1][1]:
        fre = cnt[1][0]
    else:
        fre = cnt[0][0]
else:
    fre = cnt[0][0]
    
#범위 찾기
size = max(num)-min(num)

#결과 출력
sys.stdout.write('{}\n{}\n{}\n{}\n'.format(round(sum/n), num[mid], fre, size))


채점 결과

image

참고문서

https://docs.python.org/3/library/collections.html



algorithmbojpython3 Share Tweet +1