mery's Notes

めりーがプログラミングしたりします。

MENU

AtCoder Beginner Contest (ABC) 218 Pythonで参戦しました A、B2完

前回解いたやつ

mery-kirokudayo.hateblo.jp

f:id:mery_poke:20211101225736p:plain

こんにちは。メリーです。

昨日はAtCoder Beginner Contest (ABC) 218のコンテストが開催されていましたね。

今日はその解説とか感想とか書いて行きます。

寝起きだからコーヒー飲みながらね。

あ、今回のC問題は見た時点で
「あ、無理・・・・」
となったのでB問題まで解説しまーーーーす。

言語はPython、提出はPyPyです。

というわけで目次

A問題

問題文

A - Weather Forecast

N日後の天気が晴れだとYes、雨だとNoを出力する問題ですね。

○☓(まる、ばつ)ってアルファベットのox(オー、エックス)で表現できるのいいですよね。
AtCoder で初めて知ったので今後も丸バツを使うことがあれば活用していきたい所存です。

それでは解き方の方針を。
1. 文字列Sの左からN番目の要素をチェック
2. その要素がoの場合Yes、xの場合はNoを出力

実際のコードがこちら

n = int(input())
s = input()
if s[n-1] == 'x':
    print("No")
else:
    print("Yes")

まぁ、方針そのまんまですね。
気をつけるところは1つ、
文字列Sの左からN番目の要素はS[N-1]となることです。
インデックスは1つずれるので気をつけましょう

B問題

問題文

B - qwerty

qwerty配列の問題ですね。

qwerty配列といえば、皆さんよくご存知の通りのキーボードの配置ですね。

タイプライターの時代から存在する由緒正しきキーボード配列ですね。
まぁたかが140年くらい前にできたものなので由緒正しいかは疑問であるけど
※由緒正しいと言ったら300年前くらい(江戸時代)から存在しないとね・・・(個人の感想)

というわけで、問題では1〜26までの全ての数字が重複無く与えられます。
その数字に対応したアルファベットを順番に出力してくださいという問題ですね。

やってる最中に
「ん?アルファベット?辞書順?なんか見覚えのあるぞ・・・?」
ってなりましたが、一昨日解いたやつで似たようなコードが出てきました。

mery-kirokudayo.hateblo.jp

これのB問題でもアルファベットの辞書順が出てきます。
AtCoderのB問題は辞書順が好きなのでしょうか・・・??

というわけで方針を。
1. ループを26回回す(全探索)。
2. 各ループで対応する文字を配列ansに入れる。

とっても簡単ですね。
というわけでコード

p = list(map(int,input().split()))
jisho = "abcdefghijklmnopqrstuvwxyz"
ans = []
for i in range(len(p)):
    ans.append(jisho[p[i]-1])
print("".join(ans)) 

まあ、この前の問題と同様に、jishoというリストに全部のアルファベットを格納して対応する文字を配列ansに入れるだけですね。

pは1始まり、jishoは0始まりなので注意してください。

ans.append(jisho[p[i]-1])

が苦手な人はjishoの配列を

"0abcdefghijklmnopqrstuvwxyz"

みたいにjisho[0]に適当な文字を追加すると、その後のループが

ans.append(jisho[p[i]])

になるのでお好みで。
※jishoが擬似的に1始まりになる。

print("".join(ans)) 

にしないと、出力が

['a', 'b', 'c', 'd', 'e',・・・]

となるので注意してください。

C問題(おまけ)

問題文

C - Shapes

「は?なにこれ?グロ・・・・」

(そっとブラウザを閉じる)

結果

というわけで結果です。

パフォーマンス336でした!!

いやー、A、B問題を今回はぱぱっと解けたのでパフォーマンスが上昇しました。

C問題?あいつは知らん

次回はC問題も解けるようになってパフォーマンス茶色超えたいですね。

それでは!