週末副業記

土日は副業エンジニアのブログです。副業に関することを投稿します。

map()で文字列を数字に変換(AtCoder(競プロ)1日1問【20日目】【Python】)


AtCoder Beginner Contest 092 B問題

B - Chocolate

 

競技プログラミングで使える関数を実際の問題を通して紹介いたします。

今回は「map()」です。

 

問題

N人が参加してD日間行われた。
i人目の参加者は合宿の 1,A_i+1,2A_i+1,.....日目にチョコレートを一つずつ食べる。
合宿終了後の残ったチョコレートの個数はX個である。
合宿開始前に用意されていたチョコレートの個数を求めよ。

ポイント

1,A_i+1,2A_i+1,.....日目\leq D
を満たす
A_iの係数の最大値を求めるところ。

A_iの係数をxと置くと次の不等式を満たす事が条件となる。
A_i x + 1 \leq D

したがって、
x \leq (D-1)/A_i
となる。

ただし、初期値が1であることとxは整数でなければならないことから
int((D-1)/A_i) + 1
i人目の人が食すチョコレートの数である。
この考え方に基づいてコードを書くと以下のようなコードになる。

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言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで