脱公務員からのデータサイエンティストの道

公務員、データサイエンス、勉強、書籍等についてのブログ

AtCoder Beginner Contest 219

さて、今回も始まりました、AtCoderの振り返りタイム!!

 

司会は空前絶後の最強と最弱を兼ね備えたド平凡エンジニア、大地に愛され空を愛でる心を内に秘める男、モチロウだぁぁぁ!!!

 

というわけで定例AtCoderコンテストの振り返りをしていきましょう!!

 

今回はなんと、C問題が・・・・・・・

 

 

 

 

 

 

解けませんでしたぁぁぁぁぁ!!!

 

色々頭の中で

「これいけるかな?」

なんて思索しているうちに時間切れ。

 

ここに関しては記事の最後に反省点を述べます。

 

それではさっそく行ってみましょう。

今回もpythonさんにお世話になりました。

 

 

A問題

X = int(input())

if 0 <= X < 40:
    print(40-X)
elif 40 <= X < 70:
    print(70-X)
elif 70 <= X < 90:
    print(90-X)
elif 90 <= X:
    print('expert')

 

問題がいやらしい。スコアによって「初級」「中級」「上級」「エキスパート」に分かれるみたいな導入文だったからササっと済ませようとしたら、なんと実はその1ランク上の級に行くためにあと何点必要かという問題。

さらに「エキスパート」の出力は英語でないとダメ。

はい、案の定ここで引っ掛かり1回目はWA出してしまいました笑

 

あわてるなとあれほど自分に言い聞かせていたのに・・・

 

B問題

s1 = input()
s2 = input()
s3 = input()
T = input()
S = {1:s1, 2:s2, 3:s3}

moji = []
for i in range(len(T)):
    x = S[int(T[i])]
    moji.append(x)
print(''.join(moji))

 

こっちは少し悩んでからのスピード回答ができました。

今回も辞書型にはお世話になりました。ポイントは入力文字列をバリューにした辞書を作り、それを入力値Tをキーにして呼び出し、リストに格納後joinして出力。

B問題までは辞書をどうやって使うかに気付けると解ける問題が多いのかなと思う今日この頃。

 

C問題も辞書使ってあれやこれやすればよいのかなと思ったのですが、結局for分2回回すことになるかな?とか処理時間のことも考えた結果堂々巡りで終わってしまいました。

 

ここで反省点なのですが、自分はこれまでの過去問の回答を色々見ていてpythonのライブラリを使っているとメモリの使用率が多くなる傾向があるのではという印象を持っていました。

 

だから、なるべくライブラリを使わないようにしていたのですが、今回のC問題はライブラリを使ったら簡単に解けたかもしれないと今になって思っている次第です。

 

そして、pythonの参考書に書かれている「パイソニスタ」という言葉。

定義はまちまちだけど要はpython使って効率よく考えていきましょうみたいなもんだと勝手に思っています。

 

そして、私はそれに抗っていた・・・。

 

ただし、確かに便利なpythonのライブラリではありますが、頼りっぱなしだと自力でコード書けなくなるような不安感もあり、一概に良しとも言えないもどかしさも感じております。

 

ということで、次回からは時と場合に応じてpythonのライブラリも適度に使っていこうかなと思います。

 

(そうなると、ライブラリの知識も深めていかなければならないわけですが・・・。)

 

ということで、今回はこのあたりでお開きです。