LoginSignup
1
0

More than 5 years have passed since last update.

標準入力された値の最頻値が複数あった場合でも昇順した状態で返す問題にすごく苦労した。

Posted at

某競プロ系サイトの初級問題がすごく難しかった

問題の内容を簡単に言うと、
標準入力された値で最も多く入力された数を返すだけ。
ただし、複数あった場合は昇順で返すこと。
たったそれだけの問題なのに非常に悩まされました...。

最初に考えた答え

import statistics as st

N = int(input())
lis = list(map(str, input().split()))
print(st.mode(lis))

初級問題だし余裕でしょ、っと思ったらmode()は複数の最頻値を返せないと気づく。

思考の整理

このイメージならイケるはずと思いプログラムを組む
スクリーンショット 2017-10-08 12.26.47.png

#以下のような数値の入力があったとする
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が無意味になることを知ってすごく悲しかった...。

最頻値が複数あった場合を考えるだけでこんなにも大変なのかとすごく苦労しましたね...。

参考記事

ありがとうございます。

1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0