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

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

AtCoder Beginner Contest 217

こんにちわ、モチロウです。

 

今日はAtCoderの定例コンテストでした。

 

先週はレベルBまでしか解けなかったので、今回はレベルCを何とかしてやりたいと気持ちを引き締めていたのですが・・・

 

結果は非常に悔しいもので、本当に後10秒あればCを撃破できるところまで攻めていました。

あと残り5秒の時、極度の焦りから失禁しそうになってました、マジで。

 

ということで自分のコードの振り返りを簡単にしてみようと思います。

 

使用言語は問答無用でPythonです。

 

 

A問題

N = list(map(str, input().split()))

N_s = sorted(N)

if N[0] == N_s[0]:
    print('Yes')
else:
    print('No')

 

最初問題文を読んでいてい

「あれ? ちょっとムズイパターンっすか?」

と思ったけど落ち着いたらそんなことはなかった感じでした。

元の入力をソートしてあげると辞書順になるので、それがソート前後で一致するかどうかを見るとOKなやーつ

 

 

 

続いてB問題

S1 = input()
S2 = input()
S3 = input()

S = [S1, S2, S3]
target = {'ABC', 'ARC', 'AGC', 'AHC'}
print(list*1

P = list(map(int, input().split()))
P = [i-1 for i in P]
dic = {}
for i in range(len(P)):
    dic[P[i]] = i
dic =sorted(dic.items(), key=lambda x:x[0])

ans = []

for i in range(len(dic)):
    q = dic[i][1]
    q = q + 1
    ans.append(str(q))
print(' '.join(ans))

 

もうね、これ、正直解けていました。

何なら考えが8割固まった時点で気分転換にシャワーを浴びていました。

いや、その時は考えをすっきりさせようとしていたわけだから、シャワーを浴びたことで解けそうになったんだ!!

 

と自分に言い聞かせてみますが、本当は自分を殴りたいです。

 

さて、文字に起こすのは難しいですが、備忘録として淡々と走り書きします。

 

全体像はPの添え字部分iがQの値になり、Pの値がQの添え字部分iに来る。

これを踏まえて入力値Pをリストにしてfor分でまわし、辞書Qを作る。

できた辞書Qのkeyを昇順ソートし、最後にvalueを取ってくるというわけですね。

 

ただし、添え字iはforで回すときインデックスがずれるので、ー1で一度調整します。

このー1が作成される辞書Qのkeyとvalueにも反映されてしまうのですが、最後にvalueだけに+1をして元に戻しています。

 

はい、自分で書いていて思ったのですが、これは伝わらないですね笑

 

ここまできて一回提出したのですが、最後のprintのところでリスト型のまま出力していることになっており、一度エラー。

 

あ、joinで直さにゃならんやん!!

急げ!!!

 

ってあたふたしていたところでタイムアウト

 

その後、すぐに提出してみたらACの緑文字が見事に出現。

 

ここまで悔しいのは競技プログラミング以外でも最近はそうそう経験していませんでした。

 

ということで、今回はこんな感じですね。

数学的な要素をあまり感じることがなく、パズル的な要素が強い回であったからこそ、Cは何としても取りたかったですなぁ。

 

ということで来週も懲りずに参加しますよ。

*1:set(target) - set(S)))[0])

 

ここでpythonの本領を発揮。入力した文字列を一旦リストにして、比較対象の文字列のリストから引いて残った文字列を表示する。

あっさり塩味、大好きなのはこってり味噌スープ(何の話だよ)

 

 

はい、悔し涙を流したC問題になります。

N = int(input(