본문으로 바로가기

C137:取締役選任

category TIL/Algorithm 2024. 5. 1. 00:11

ある会社では、2 人の取締役を選任しようとしています。
取締役の選任は、以下の 2 つの方法を用いて行い、それぞれの方法で 1 人の取締役を選任します。

・株主 1 人につき 1 票の投票権があり、最多得票数を得た者を取締役とする
・株主 1 人につき持株数分の投票権があり、最多得票数を得た者を取締役とする

例えば、入力例 1 は以下のようになります。

N 人の株主について、持株数及び誰に投票したかについての情報が与えられるので、上記の方法に従って取締役として選任された者の名前を出力するプログラムを作成してください。
なお、いずれの方法についても最多得票数を得た者が複数存在することはないものとします。
ただし、同一人物が 2 種類の投票の両方で最多票を得る可能性があることに注意してください。
また、同名の候補者が複数人存在することはないこととします。例えば、図の "john" が指し示す人物は、全て同一人物です。

 

評価ポイント10回のテストケースで、正答率、実行速度、メモリ消費量をはかり得点が決まります。
より早い解答時間で提出したほうが得点が高くなります。
  1. 複数のテストケースで正しい出力がされるか評価(+50点)
  2. 解答までの速さ評価(+50点)
入力される値

入力は以下のフォーマットで与えられます。

N
C_1 S_1
C_2 S_2
...
C_N S_N
  • ・1 行目には、投票する株主の数を表す整数 N が与えられます。
  • ・続く N 行の i 行目 (1 ≦ i ≦ N) には、i 番目の株主が投票した者の名前を表す文字列 C_i と、その株主の持株数を表す整数 S_i がこの順で半角スペース区切りで与えられます。
  • ・入力は合計で 1 + N 行となり、入力値最終行の末尾に改行が 1 つ入ります。

それぞれの値は文字列で標準入力から渡されます。標準入力からの値取得方法はこちらをご確認ください
期待する出力選任された取締役の名前を表す文字列を以下のように出力してください。
A_1
A_2
・1 行目には、1 の方法で選出された取締役の名前を表す文字列 A_1 を出力してください。
・2 行目には、 2 の方法で選出された取締役の名前を表す文字列 A_2 を出力してください。
・出力最終行の末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件

すべてのテストケースにおいて、以下の条件をみたします。

  • ・1 ≦ N ≦ 1,000
  • ・C_i (1 ≦ i ≦ N) は英字小文字のみからなる
  • ・1 ≦ (C_iの長さ) ≦ 10 (1 ≦ i ≦ N)
  • ・1 ≦ S_i ≦ 1,000 (1 ≦ i ≦ N)
  • ・同じ投票方法での最多票を得る者が複数出ることはない
入力例1
4
john 1
john 5
alex 40
john 4
出力例1
john
alex
入力例2
2
smith 675
smith 694
出力例2
smith
smith

0

示す(します)나타내다

方法に従って

同一(どういつ)

に従って

最多(さいた)

選任

2 つの方法を用いて行い

# 4
# john 1
# john 5
# alex 40
# john 4

a = int(input())
# print(a)
vote = {}
people = [list(map(str, input().split())) for i in range(a)]

for i in people:
    vote_name = i[0]
    # print(vote_name)
    if vote_name in vote:
        vote[vote_name] += 1
    else:
        vote[vote_name] = 1
max_vote = max(vote.values())
select_1 = [person for person, vote_count in vote.items() if vote_count == max_vote]
print(*select_1)

vote.clear()
for i in people:
    vote_name = i[0]
    stock = i[1]
    if vote_name in vote:
        vote[vote_name] += int(stock)
        # print(vote)
    else:
        vote[vote_name] = int(stock)
        # print(vote)

max_vote = max(vote.values())
select_2 = [person for person, vote_count in vote.items() if vote_count == max_vote]
print(*select_2)
        
        
# print(vote)
# print(max_vote)

'TIL > Algorithm' 카테고리의 다른 글

C071:直角三角形  (0) 2024.05.01
C131:ユニークな部屋番号  (0) 2024.04.30
C133:雷危険地域  (0) 2024.04.28
C092:工場のベルトコンベア  (0) 2024.04.27
C032:お得な買い物 ???  (0) 2024.04.26