【AtCoder 緑色を目指して】ABC373 Python【競技プログラミング】

技術ブログ 競技プログラミング

はじめに

こんにちは、駒嶺です。今回はAtCoder Beginner Contest 373の所感です。
今回もPythonで解いていきます。

A – September

12個の文字列S1~S12が渡されます。
Siの長さがiであるものがいくつあるか数えます。

S = [input() for _ in range(12)]

ans = 0
for i, s in enumerate(S):
    if len(s) == i + 1:
        ans += 1

print(ans)

for文を使って問題文の通りに文字数を確認します。
for内で配列のインデックスを使いたいときはenumerateを使う方がPythonっぽくて好きです。

B – 1D Keyboard

A~Zの文字を並び替えた文字列Sが渡されます。
文字列SをA~Zの順でなぞるときの移動距離を求めます。

解答

S = input()

d = {(ord(c) - ord("A")): i for i, c in enumerate(S)}

current = d[0]
ans = 0
for i in range(26):
    ans += abs(d[i] - current)
    current = d[i]

print(ans)

A~Zの各文字について、文字列S内の位置を辞書化しました。
あとはA~Zの順にその辞書を見ていって移動距離を加算していきます。

C – Max Ai+Bj

整数列A、Bから1つずつ値を選んで足した時、その最大値はいくつでしょうか?

解答

N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))

print(max(A) + max(B))

A、Bそれぞれの最大値を足すだけです。

コンテスト結果

グラフ問題のD問題を飛ばしてE問題に挑みましたが回答できずコンテスト終了となりました。
今回Cまでの問題はかなり簡単だったのであと一問解けるかどうかがパフォーマンスに大きく影響するところでした。
Eを解く力を身につけるより先にグラフ問題への苦手意識を克服しようと思います。

おわりに

次回はABC374の記事を投稿します。
本ブログを通じて私と一緒に競技プログラミングの世界を楽しんでいただければ幸いです。
また、各種ご支援させていただきますので、お気軽に「お問い合わせフォーム」よりお問い合わせください。

関連記事