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

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

AtCoder Beginner Contest 216

今日は競技用プログラミング「AtCoder」の定例コンテストでした。

 

自分は2週間前からの参加でしたが、過去問でコンスタントに回答できていたB問題が立て続けに解けなかったということもあり、今回はなんとしてもB問題までは解こうという気持ちで一杯でした。

まさに復讐の鬼といった感じ。

 

そして正直今の自分の力量だとC問題以上はなかなか難しい。

というのも個人的にC問題以上はアルゴリズムを理解していないと解けない問題となっており、今の自分にはアルゴリズムがナイゴリズムだからだ!!!

(少しずつ勉強しないとなぁ・・・)

 

というわけで、今回は何とかB問題までは解けたので、提出したコードとどうやって考えたか備忘録として残したいと思います。

ちなみに使用言語はみんなが大好きpythonです。

 

A問題

N = input()

N_l = N.split('.')
N_l = [int(i) for i in N_l]


if 0 <= N_l[1] <= 2:
print(str(N_l[0])+'-')
elif 3 <= N_l[1] <= 6:
print(str(N_l[0]))
elif 7 <= N_l[1] <= 9:
print(str(N_l[0])+'+')

 

実はA問題は2回ほど間違いを出していたのでした、トホホ。。。

というのも、問題のifの条件とそれに対する出力がごっちゃになっていたからでした。

こういうケアレスミスがあると、結構沼にはまったりするので初心者ほど丁寧に問題文を見直す必要がありますね。(自戒)

個人的ポイントは入力の文字列を一度int型にして、それをリスト型に変換し、そこからインデックス指定でif分をかましたところ。

確実にゴリ技、うっほっほーい。

絶対もっと要領よくできたので、メモリ使用率が少ない人のコードを見直さなければ。

Simple is best

 

 

そして次はB問題

N = int(input())

names = []
for i in range(N):
name = input()
if name:
names.append(name)

if len(names) != len(set(names)):
print('Yes')
elif len(names) == len(set(names)):
print('No')

 

こちらは一発クリア。

悩むことなく淡々とコードを書いて終了。ポイントは入力した名前をリストにして、その後set関数で重複を除き、要素数を比較して同姓同名がいるかを判断。

 

C問題は解けそうかなと最初は思ったけど、考えているうちに深みにはまり途中放棄笑

 

ということで、レイティングは上昇し灰色の17

これが何なのかよくわかっていませんが、上昇しているのだから良しとしましょう。

 

ということで来週もAtCoderのコンテスト頑張りますで!

(Cは解きたいなぁ)