Back Junアルゴリズム|2108号-統計学


▼▼問題



📝 問題を解く


算術平均値、中央値、範囲はPython内蔵関数で簡単に得ることができ、最も頻繁な値を求める方法を知る必要があります.
最初はdictを書こうと思ったので、時間の複雑さの観点からあまり良い方法ではないアルゴリズムを考えたので、別の方法を考えました.
最初に思いついた方法はsetを用いて重複値を除去するリストを再生成することである.この方法は、最も頻繁な値を容易に求めることができるが、条件の1つである「最も頻繁な値が複数ある場合、最も頻繁な値の中で2番目に小さい値を出力する」満足しにくい.
検索してcollectionsで最低価格を求める方法を知りました.私の考えの中で、最も体現できるのも最も簡潔で、最も得やすいようです.でもIndexErrorが...
なぜかと思うので、リスト長が1の値を入力しました.これが問題です.比較可能なmdoeがない[1][0]ため、エラーが発生した.最後に,リスト長が1の問題を再処理し,成功した.

👩🏻‍💻 ソースコード

import sys
from collections import Counter

# 입력 받기
n = int(sys.stdin.readline().rstrip())
num = [int(sys.stdin.readline().rstrip()) for i in range(n)]

# 최빈값 처리
mode = Counter(sorted(num)).most_common(2)
if len(mode) == 1 or mode[0][1] != mode[1][1]:
    many = mode[0][0]
else: many = mode[1][0]

sys.stdout.write(str(round(sum(num)/n))+'\n')
sys.stdout.write(str(sorted(num)[n//2])+'\n')
sys.stdout.write(str(many)+'\n')
sys.stdout.write(str(max(num)-min(num))+'\n')