AtCoder Beginner Contest 092 B問題
競技プログラミングで使える関数を実際の問題を通して紹介いたします。
今回は「map()」です。
問題
N人が参加してD日間行われた。
i人目の参加者は合宿の 日目にチョコレートを一つずつ食べる。
合宿終了後の残ったチョコレートの個数はX個である。
合宿開始前に用意されていたチョコレートの個数を求めよ。
ポイント
日目日
を満たす
の係数の最大値を求めるところ。
の係数をと置くと次の不等式を満たす事が条件となる。
したがって、
となる。
ただし、初期値がであることとxは整数でなければならないことから
が人目の人が食すチョコレートの数である。
この考え方に基づいてコードを書くと以下のようなコードになる。
map()で文字列を数字に変換
N = int(input()) D,X = map(int,input().split()) A = [int(input()) for i in range(N)] chocolate = [int((D-1)/A[j])+1 for j in range(N)] print(sum(chocolate) + X)
input().split()により文字をスペース区切りで分割し、その分割された文字をmap関数により整数型に変換しています。
コードの改善
競技プログラミングではプログラムの処理完了までの速度も重要な要素の一つですので、より短く簡潔なコードを書くことが重要です。
n=int(input()) d,x=map(int,input().split()) r=0 for _ in range(n): r+=1+(d-1)//int(input()) print(r+x)
Pythonでは今後使用しない変数に対して名前を与える必要がないため、
「”_”」を変数名として使用することがありますのでチェックしておきましょう。
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者: コーリー・アルソフ,清水川貴之監訳,清水川貴之,新木雅也
- 出版社/メーカー: 日経BP社
- 発売日: 2018/02/24
- メディア: 単行本
- この商品を含むブログ (2件) を見る