この記事は拙著「AtCoder 凡人が『緑』になるための精選50問詳細解説」のサンプルです
価格:100円
kindle:https://www.amazon.co.jp/dp/B09C3TPQYV
booth(pdf):https://sano192.booth.pm/items/3179185
前:https://qiita.com/sano192/items/467939ec8336d0bec380
次:https://qiita.com/sano192/items/f2bb2fde590bc11e7cfb
【目標】
・リストの使い方を身につける。
・「やるだけ」問題を実装できるようになる。
【概要】
コンテスト終了後、Twitterで「B問題:やるだけ」と書かれるタイプの問題。
「やるだけ」とは問題文にある操作をそのままコードにできれば解けるという意味。
考え方に難しいところはないので、ぱぱっと実装できるようになろう。
【方針】
問題文にはベクトルだの内積だの書いているが、最後の行にある式
A1B1+A2B2+A3B3+...+ANBN
を計算して0か否か判定できれば解ける。
具体的には以下の手順で実装する。
(1)A、Bをリストとして受け取る
(2)for文でA1B1、A2B2、...を計算して足す
(3)0かどうかを判定する
そもそもリストが何かわからない人は以下のサイトがわかりやすいので見てほしい。
https://www.python.jp/train/list/list.html
【実装】
入力を受け取る。ここがわからないひとは「1 入力と出力」を確認しよう。
(1)A、Bをリストとして受け取る
リストの受け取りはA=list(map(int, input().split()))と書く。
N=int(input())
A=list(map(int, input().split()))
B=list(map(int, input().split()))
次に内積を格納する変数を作る。変数名は「naiseki」
naiseki=0
内積は英語でinner productだが英語がわからなければ日本語そのままで変数名をつけてしまえば良い。変数名は自分がわかればなんでもよい。
(2)for文でA1B1、A2B2、...を計算して足す
for文の使い方を説明しよう。
for i in range(N):
上記のように書くとi=0~(N-1)まで順番に数字を入れてfor文内の処理を行ってくれる。
(リストのインデックス番号(要素がリストの何番目にあるかを示す番号)は0から始まるため、最初~最後=0~(N-1)となる)
for分でリストの要素を一つ一つ取り出しながら掛け算し、naisekiに足していく。
for i in range(N):
naiseki+=A[i]*B[i]
この部分は具体的には以下の処理を行っている。
1周目:A[0]×B[0]をnaisekiに足す
2周目:A[1]×B[1]をnaisekiに足す
...
N周目:A[N-1]×B[N-1]をnaisekiに足す
ちなみにnaiseki+=という書き方は右辺の値をnaisekiに足すという意味。以下のように書いても同じ処理をする。
naiseki=naiseki+A[i]*B[i]
(3)0かどうかを判定する
for文の処理が終われば問題文の通りに内積が計算され、結果がnaisekiに入っている。
あとはこれが0かどうか判定すればOK。
if naiseki==0:
print("Yes")
else:
print("No")
【コード全文】
N=int(input())
A=list(map(int, input().split()))
B=list(map(int, input().split()))
naiseki=0
for i in range(N):
naiseki+=A[i]*B[i]
if naiseki==0:
print("Yes")
else:
print("No")
この記事は拙著「AtCoder 凡人が『緑』になるための精選50問詳細解説」のサンプルです
価格:100円
kindle:https://www.amazon.co.jp/dp/B09C3TPQYV
booth(pdf):https://sano192.booth.pm/items/3179185
前:https://qiita.com/sano192/items/467939ec8336d0bec380
次:https://qiita.com/sano192/items/f2bb2fde590bc11e7cfb