某競プロ系サイトの初級問題がすごく難しかった
問題の内容を簡単に言うと、
標準入力された値で最も多く入力された数を返すだけ。
ただし、複数あった場合は昇順で返すこと。
たったそれだけの問題なのに非常に悩まされました...。
最初に考えた答え
import statistics as st
N = int(input())
lis = list(map(str, input().split()))
print(st.mode(lis))
初級問題だし余裕でしょ、っと思ったらmode()は複数の最頻値を返せないと気づく。
思考の整理
#以下のような数値の入力があったとする
a = [12, 3, 12, 4, 3, 64, 43, 64, 12, 4, 64]
c = []
b = list(set(a))
print(b)
for x in b:
c.append(a.count(x))
d = dict(zip(b,c))
max_val = max(d.values())
keys_v = [i for i in d if d[i] == max_val]
keys_v.sort()
e = " ".join((map(str,keys_v)))
print(e)
#output -> 12 64
イメージではsortしたリストをdictにできると思ったけど、
dictにする時点でsortが無意味になることを知ってすごく悲しかった...。
最頻値が複数あった場合を考えるだけでこんなにも大変なのかとすごく苦労しましたね...。
参考記事
ありがとうございます。