AtCoder Beginner Contest 124に参加しました

はじめに

AtCoder Beginner Contest 124 (コンテスト時間: 2019-04-13(土) 21:00 ~ 2019-04-13(土) 22:40) に参加しました。
このコンテストが初参加でした。

現在(2019/7/7時点)10回ほど参加し、茶コーダーです。
実力は普通だということが判明しました。

普通を抜け出すための試みの一つとして考えたことを思い出しながら、 記事に書くことにしました。
python3で取り組んでます。

A:Buttons

初めての入力処理でおっかなびっくりでした。
入力をlistで受けていて、微妙ですね。。

n = list(map(int, input().split()))
if n[0] == n[1]:
    print(n[0] * 2)
else:
    print(max(n) + max(n) - 1)

今だったら、入力はこう書くかな

a,b = map(int, input().split())
  1. 単純にmax(a,b)*2-1にしたいけど、
  2. 同じ場合だけ例外だなー
  3. 場合分けなきゃダメかー
    という発想でしたね。

B:Great Ocean View

n = int(input())
mountains = list(map(int, input().split()))
memo = 0
result = []
for m in mountains:
    if (m >= memo):
        memo = m
        result.append(m)
print(len(result))
  1. ループ回すんだろうなー
  2. 最高地点を保存して、要素それぞれと比較すれば良さそう
  3. 最高地点は更新しなきゃダメだなあ

ループを使った処理では、ループ外に状態を持たせ、 各要素と比較させて、状態を更新していくことは割とよくやる ことだと思いますが、まだなんとなく言語化しきれてないモヤっとした気持ちがあります。 再帰で考え直してみるかなあ。。

C:Coloring Colorfully

a = [i for i in input()]
target1 = []
target2 = []
for i, n in enumerate(a):
    if i % 2 == 0:
        target1.append('1')
        target2.append('0')
    else:
        target1.append('0')
        target2.append('1')
 
result1 = 0
result2 = 0
for i, el in enumerate(a):
    if target1[i] != el:
        result1 += 1
    if target2[i] != el:
        result2 += 1
 
print(min(result1, result2))

不細工ですが、0始まりと1始まりのリストを作って 所与のリストと比較してます。 割とC解けるじゃんととても安心した記憶があります。

D:Handstand

Cまで解けたので、Dも解けるんじゃないか!?と期待したものの 回答までたどり着けませんでした。 いろんな場合わけを考えて、入れ子が7段くらいになっていたので、 不正解回答は載せるのやめておきます。。結局解けてもないですし。。

尺取り法や累積和という方法があるということを初めて知り、 知ってるとちょっと違ったかなと思いました。

まとめ

当時、Cまで割とそれなりの速さで解けたので、割と満足はしてましたし、 Dが解けないのは知らなかっただけだと思い、割とすぐ緑くらい行っちゃうなーと 軽く考えてました。。 この記事書きながら復習していたのですが、 Dは改めて見たら解き方を忘れてましたね。記憶に引っかけられてなかったです。

AtCoder自体はRatingが出るのがとても楽しくてモチベーションになるなあと思いましたし、
自分が全然わからなかった問題を圧倒的な速さで解く人たちが現実にいるのだなと驚きました。
この後、悔しくて考えすぎて寝れなくなったので、今後の参加をどうするかは考えてしまいましたが、
自分の状態を受け入れられずに悶えてもしょうがないし、
ゲーム感覚で楽しむことは忘れてはダメだなと考えて、現在も続けてます。 もう少しあれこれ考えて疑問の言語化に試みていこうと思います!年内水色目標です!