[백준/파이썬] 2108번

민정·2023년 3월 5일
0

[백준/파이썬]

목록 보기
108/245
post-thumbnail

백준 2108번

문제

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

코드

import sys
from collections import Counter

if __name__ == "__main__":
    num = int(sys.stdin.readline())
    n = []

    for _ in range(num):
        n.append(int(sys.stdin.readline()))
    n.sort()
    cnt = Counter(n).most_common(2)
    print(round(sum(n)/len(n)))
    print(n[num//2])
    if len(n) > 1:
        if cnt[0][1] == cnt[1][1]:
            print(cnt[1][0])
        else:
            print(cnt[0][0])
    else:
        print(cnt[0][0])
    print(max(n) - min(n))

풀이

산술평균, 중앙값, 범위는 구하기 쉬웠습니다.
counter.most_common(2)을 이용하여 최빈값 2개를 반환합니다.
만약, 개수가 같다면 뒤의 값을 출력하고 (두번째로 작은 값을 출력하라고 했으므로) 개수가 다르다면 앞의 값을 출력합니다. (앞의 값이 개수가 더 많으므로)

알게된 점

  • counter
    collections.Counter(a) : a에서 요소들의 개수를 세어, 딕셔너리 형태로 반환합니다.
    형태: {문자 : 개수}
    함수로 구한 딕셔너리 값끼리 연산이 가능합니다. => +, - &(교집합), |(합집합)
    Counter(a).most_common(n) : a의 요소를 세어, 최빈값 n개를 반환합니다.
profile
パㅔバ6ㅇr 덤벼ㄹΓ :-0

0개의 댓글