Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

最初に考えた答え

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が無意味になることを知ってすごく悲しかった...。

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

参考記事

https://qiita.com/matsudai/items/5c03c6d7f19893fa2e86

ありがとうございます。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away