Tenka1 Programmer Beginner Contest 2019の反省会
はじめに
Tenka1 Programmer Beginner Contest 2019に参加しました。
競プロは通算2回目の参加。 前回のAtCoder124は仮眠を取ろうとしたら寝坊して1時間遅れで参加したので、 開始から解いたのは実は今回が初めてでした。
BeginnerSelectionを全てとき、 いくつかの過去問を解いていたことでABCは解けるはずと 変に慢心していました。
悲しみをどうしていいのかわからないので、 気持ちを忘れないように書きなぐっておこうと思います。
戒め。
反省点
A - On the Way
'No'を'no'と記載してしまい痛恨のWA
早く提出しなければいけないという焦りでミスタイプを見逃してしまいました。勿体無い。
確認10秒!! 修正10分!!
A<C<BまたはB<C<Aか判断して条件式で出すだけ。
提出したコード
a,b,c = map(int,input().split()) print("Yes" if (a<c and c<b) or (b<c and c<a) else "No")
B - *e**** ********e* *e****e* ****e**
pythonの文字列の一文字だけ変更はできないことを忘れていました。
エラーコードで思い出せてよかったです。
今回のミスで一生忘れなくなりそう...。
それはそれでいいことかと思うことにします。
文字列をリストにする。 特定の文字以外を見つけたら文字を変更する。 リストをjoinメソッドで繋げる。
提出したコード
N = int(input()) S = list(input()) K = int(input()) buff = S[K-1] for i in range(len(S)): if buff != S[i]: S[i] = '*' print("".join(S))
C - Stones
大反省案件。
今思うとこんな考え方をしてしまったのが恥ずかしい。
変な法則性を見つけていくつか試して実装してしまいました。
たまたま見つけたのですが、 '#'と'.'の数を数えて差が少ない方を足していけば答えになるという考え方。
問題説明にある例は通るし、自分でサンプルとして考えたinputは処理できていたので、信じ切ってしまっていました。
制限時間がきて冷静になって問題を見ると、 ........か....####か######になるパターンだけってことに気が付いたので 本当に勿体無い時間を過ごしてしまったと思います。
戒めのためにコードを記載。
提出したコード(WA)
# WA N = int(input()) S = list(input()) sharp_num =[] dot_num = [] search = '#' count = 0 for c in S: if search == '#': if c == search: count += 1 else: sharp_num.append(count) count = 1 search = '.' else: if c == search: count += 1 else: dot_num.append(count) count = 1 search = '#' if search == '#': sharp_num.append(count) dot_num.append(0) else: dot_num.append(count) total = 0 for i in range(len(sharp_num)): total += min(sharp_num[i],dot_num[i]) print(total)
全体を通して
- Aの問題を解く
- Aの判定が終わる前にBを解き始める
- Bの途中でAがWAと気づき修正
- 混乱しながらもBを解く
- 混乱してすがる思いでCの変な法則に執着する
- 問題文の問題がクリアできたので提出後判定を確認する前にD開始
- Dの途中でCができていないことに気がつき冷静さが完全になくなる
これからの課題
過去問を解くのを継続し、知らないアルゴリズムを身につけ、 問題を解く手札を増やす。
さいごに
確認10秒!! 修正10分!!
根拠のない法則性に賭けるのはダメ絶対!!!