目次
- はじめに
- 問題URL
- 考え方
- 提出コード
- コード解説
- おわりに
質問・指摘などがありましたらコメントかTwitterまでお願いします。
はじめに
yukicoderで簡単な問題として掲載されていたNo.289を解きました。Python3の解説が見当たらなかったので、私の解答を参考までに書いておきます。
問題URL
考え方
半角英数字のみからなる文字列が与えられます。この中から数字を抽出し、総和を求めればよいです。
文字列メソッドの利用
Pythonでは文字列(str
)がどんなものであるか判定するためのメソッドが用意されています。判定できるのは英字、英数字、ASCII文字、空文字列などです。
・組み込み型 — Python 3.9.4 ドキュメント
今回は十進数字かどうか判別するstr.isdecimal()
を用いて解きました。
s_1 = "0123"
s_2 = "abcd"
print(s_1.isdecimal())
# True
print(s_2.isdecimal())
# False
このように、str.isdecimal()
は True
もしくは False
を返します。
提出コード
S = list(str(input().rstrip())) #rstrip()で改行コード除去
res = 0 #数字がない場合は0を出力
for i in range(len(S)):
TF = S[i].isdecimal()
if TF:
res += int(S[i])
else:
pass
print(res)
実行時間は20ms、使用メモリは7956KBでACでした。
コード解説
まず与えられた文字列を1文字ずつ分割し、str
型でリストに格納します。出力の初期値を0
とした後、for文とif文を用いて、1文字ずつ数字かどうかの判定を行ないます。数字だった場合には、int
型に変換し、出力に加算します。これを文字列の長さ分繰り返し、最後に出力します。
おわりに
Pythonは標準ライブラリが充実しているだけでなく、組み込み関数やメソッドも充実しているので、競技プログラミング等で軽い処理をする際にはとても実装しやすい言語だと思います。
yukicoderではAtCoderとは違う傾向の問題が多く出題されているので、解きながら勉強になるものが多いと感じています。
この記事で用いたコードを含め、yukicoderやAtCoderに提出したコードは、Githubにアップロードしています。気になる方はこちらからどうぞ↓
・for_yukicoder — Github/PyRadiolarus