리셋 되지 말자

[백준 2108] 통계학 - 구현, 정렬 본문

알고리즘

[백준 2108] 통계학 - 구현, 정렬

kyeongjun-dev 2022. 1. 3. 11:43

코드1 - Counter만 사용

import sys
from collections import Counter
def solution(arr):
    # round : 소수점에서 반올림한 평균 출력
    print(round(sum(arr)/len(arr)))

    # 홀수개인 원소 중, 가장 가운데 있는 원소 출력
    print(arr[len(arr)//2])

    # Counter : 원소값이 각각 몇개 있는지 분류
    cd = Counter(arr)

    # 최빈값의 횟수를 저장
    max_num = max(cd.values())

    cnt_arr = []

    # 최빈값에 해당하는 key를 cnt_arr에 저장
    for key in cd.keys():
        if cd[key] == max_num:
            cnt_arr.append(key)

    # 최빈값에 해당하는 수가 여러개면, 두 번째수[1]를 출력
    # 최빈값에 해당하는 수가 한 개라면 첫 번째수[0]를 출력
    if len(cnt_arr) >= 2:
        cnt_arr.sort()
        print(cnt_arr[1])
    else:
        print(cnt_arr[0])

    # 정렬되어 있는 arr의 마지막 수와 첫 번째 수의 차이를 출력
    print(abs(arr[-1] - arr[0]))

n = int(input())
arr = []
for _ in range(n):
    arr.append(int(sys.stdin.readline()))
arr.sort()
solution(arr)

 

코드2 - Counter의 most_common 사용

import sys
from collections import Counter
def solution(arr):
    # round : 소수점에서 반올림한 평균 출력
    print(round(sum(arr)/len(arr)))

    # 홀수개인 원소 중, 가장 가운데 있는 원소 출력
    print(arr[len(arr)//2])

    # Counter.most_common : 최빈값인 key, value 쌍을 두 개 저장
    cd = Counter(arr).most_common(2)

    # 최빈값 value를 갖는 쌍이 두 개면, 두 번째로 작은 key를 출력
    # 최빈값 value를 갖는 쌍이 한 개면, key를 출력
    if len(cd) >= 2 and cd[0][1]==cd[1][1]:
        print(max(cd[0][0], cd[1][0]))
    else:
        print(cd[0][0])

    # 정렬되어 있는 arr의 마지막 수와 첫 번째 수의 차이를 출력
    print(abs(arr[-1] - arr[0]))

n = int(input())
arr = []
for _ in range(n):
    arr.append(int(sys.stdin.readline()))
arr.sort()
solution(arr)

 

설명

  • Counter의 most_common은 대상이 되는 배열의 최빈값이 한개 더라도 오류가 발생하지 않는다.
  • 예를들어, [1, 1, 1, 1,] 이면 Counter의 결과로 {1:4} 가 반환되는데, 여기서 most_common(2)를 하면 [(1,4)]가 반환된다.
Comments