この記事は拙著「AtCoder 凡人が『緑』になるための精選50問詳細解説」のサンプルです
価格:100円
kindle:https://www.amazon.co.jp/dp/B09C3TPQYV
booth(pdf):https://sano192.booth.pm/items/3179185
前:https://qiita.com/sano192/items/4432b669a04e69287c05
次:https://qiita.com/sano192/items/40fdf83cedacbc9d68a6
【目標】
・リストの作成、要素の追加方法を身につける。
【概要】
B問題でよくある数列をどうにかする問題。基本的なリストの操作をこの問題で身につけよう。
【方針】
問題文には「取り除き」とあるが、リストに受け取った後問題文の通り削除していくとインデックス番号がずれたり、実行時間が長すぎたりして大変になる。
以下のように実装すればよい。
(1)答えを格納するリスト(=ans)を用意する
(2)リストの要素を順番に確認し、Xと違う数字ならansに格納する
(3)ansの要素を出力する
【実装】
入力を受け取る
N,X=map(int, input().split())
A=list(map(int, input().split()))
答えを入れるリストをansとして定義する。ansは最初空っぽ。
ans=[]
次にAの要素を順番に確認し、Xと違う数字ならansに追加していく。
リストへの追加は
リスト.append(要素)
と書く。
for i in range(N):
if A[i]!=X:
ans.append(A[i])
A[i]!=Xは「A[i]がXと異なる」という意味。その場合はansにA[i]を追加する。
最後に答えを出力する。
print(*ans)
アスタリスクをつけずに単にprint(ans)とした場合、余計なカッコがつく。
たとえばans=[3,6,4]だった場合、
print(ans) → [3, 6, 4]
print(*ans) → 3 6 4
となる。
リストの要素を出力するときはアスタリスクをつけるようにしよう。
この問題については公式解説の「解答例(python)」がかなりマニアックな書き方をしている。この問題が解けなかった人が読んでも意味不明だろう。ある程度競技プログラミングに慣れていても意味不明なので気にしなくていい。
公式解説の内容はわかるがコード例が読めない、ということはよくある。そういうときは「提出結果」から他の人の提出結果を見てみよう。
「提出日時」を2回クリックして提出の早い順に並べ、上から5つ程度コード内容を確認するとわかりやすいコードが1つ、2つ出てくるだろう。
【コード全文】
N,X=map(int, input().split())
A=list(map(int, input().split()))
ans=[]
for i in range(N):
if A[i]!=X:
ans.append(A[i])
print(*ans)
この記事は拙著「AtCoder 凡人が『緑』になるための精選50問詳細解説」のサンプルです
価格:100円
kindle:https://www.amazon.co.jp/dp/B09C3TPQYV
booth(pdf):https://sano192.booth.pm/items/3179185
前:https://qiita.com/sano192/items/4432b669a04e69287c05
次:https://qiita.com/sano192/items/40fdf83cedacbc9d68a6