【AtCoder】ABC304解説(Python)

東京海上日動プログラミングコンテスト2023(AtCoder Beginner Contest 304)の解説記事です。

ABC304 A – First Player

問題

問題文の要約は以下の通りです。

問題の要約

\(i = 1, 2, \cdots, N\) と番号の付けられた \(N\) 人が順番に時計回りに円卓に座っています。名前は\(S_{i}\) 、年齢は\(A_{i}\)で同じ名前や年齢の人はいません。
年齢が最も小さい人から時計回りに\(N\) 人の名前を出力せよ。

制約

・\(2 \le N \le 100\)
・\(N\) は整数
・\(S_{i}\) は英小文字からなる長さ1から10以下の文字列
・\(i \neq j \Rightarrow S_{i} \neq S_{j}\)
・\(0 \le A_{i} \le 10^{9}\)
・\(A_{i}\) は整数
・\(i \neq j \Rightarrow A_{i} \neq A_{j}\)

入力

\(N\)
\(S_{1}\) \(A_{1}\)
\(S_{2}\) \(A_{2}\)
\(\vdots\)
\(S_{N}\) \(A_{N}\)

出力

 答えを出力せよ。

解法

年齢が最も小さい人をfor文で探し、もう一度for文を回して名前を出力する。

解説

まず入力 \(N\) をint型で受け取り、
\(S_{1}\) \(A_{1}\)
\(S_{2}\) \(A_{2}\)
\(\vdots\)
\(S_{N}\) \(A_{N}\)
を\(S\)で受け取ります。

N=int(input())
S=[input().split() for i in range(N)]

年齢の最大は\(10^{9}\)なのでそれをaとおき、\(A_{i}\) と比べることで最小の年齢を探します。

a=10**9
for i in range(N):
  a=min(a,int(S[i][1]))

年齢の最小値がわかったのでそれが何番目かをfor文で探します。
先ほどのfor文で変数として持っていてもよいです。
そこから1周for文で回します。
\(N\)の次は1の人なので(i+j)%N番の人を順に出力すればよいことが分かります。

for i in range(N):
  if a==int(S[i][1]):
    for j in range(N):
      print(S[(i+j)%N][0])

解答

N=int(input())
S=[input().split() for i in range(N)]
a=10**9
for i in range(N):
  a=min(a,int(S[i][1]))

for i in range(N):
  if a==int(S[i][1]):
    for j in range(N):
      print(S[(i+j)%N][0])
1 2
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!