サマリー
記念すべきQiita初投稿です。
今回は、非エンジニアである自分がAtCoderのABCコンテストのB問題まで解けるようになった話をします。
https://atcoder.jp/users/futai23
きっかけ
たまたま勢いで着手したのですが、そのときにピンと来たのが以下のような理由。
- 社内でCTOと数名のエンジニアがやるぞ!って言い出した流れに乗っかった
- やってみたら結構好きだった(C・D問題も数学力的にはそのうち届くような感じがした)
- アウトプットベースで「コード書いたことある」と言いたかった
それまでのエンジニアリングへの取り組み
- Paiza(3年前に社長に教えてもらいながらCランクまで到達)
- みんなのPython(3日で挫折)
- 社内SQL講座(DBの鬼こと @denzow が企画・運営してくれた)
- エンジニア向けのスカウトメール執筆(累計何百通かは書いてる)
やったこと
- ABCのA問題の20問
- ABCのB問題の5問
- ABCのC問題の4問
- ABCコンテストに3回出場
これらの内容を約一ヶ月間で学習しました。
練習方針
1.完全独力で解こうとする。
2.標準入力のやり方を忘れている場合、標準入力のみ他の人の回答を見る。
3.独力でACを獲得するまで粘る。
4.回答方針は合ってそうなのにどうしてもACが取れない場合は答えを見て写経する。
5.回答指針がまったく立たない場合は答えを写経。
6.写経した場合は、1から空で書き直し。
という方針で1問ずつ解いていきました。
B問題まではアルゴリズムの観点で困ることはなく、圧倒的な実装力不足と対峙していくこととなります。
勉強した部分
標準入力
入力
入力は以下の形式で標準入力から与えられる。
A B C
回答の一部抜粋
A,B,C = map(int, input().split())
この標準入力を覚えることが最初の関門でした。
おまじない
で覚えてしまうとB問題で登場する下記のような形式に対応できないため、それぞれの関数の意味を丁寧に理解していきました。
入力
入力は以下の形式で標準入力から与えられる。
N
p1 p2 ... pN
回答の一部抜粋
N = int(input())
p = list(map(int,input().split()))
if文(A問題)
if文はある程度理解していたのですが、 :
の使い方 や インデントの使い方の理解が曖昧だったこともあり、エラーが続出しました。
A,B,C = map(int,input().split())
answer = C-A+B
if answer >= 0:
print(answer)
else :
print(0)
たとえばA問題ではこの程度の回答が書けるようになりました。
for文(B問題)
for文はPaiza時代に解いたことはあるのですが、まったく覚えておらずググりながら理解していきました。
累算代入文の使い方 += 1
や for文とif文の組み合わせ時のインデント の理解に少し苦戦しました。
N = int(input())
p = list(map(int,input().split()))
ans = 0
for i in range(N):
if p[i] != (i+1) :
ans += 1
if ans == 0:
print('YES')
elif ans == 2:
print('YES')
else :
print('NO')
たとえばB問題ではこの程度の回答まで書けるように。
途中で気付いた便利な機能(コードテスト)
コードテスト機能に気づくまで、過去問を解いているときはREを頻発しておりました。
こちらの機能では、標準入力の数字を入れて、コードを書いて実行すると、結果を戻してくれます。
なぜ途中で止めたか
ここまで高いモチベーションで続けており、1ヶ月でB問題を解けるようになり、
順風満帆なAtCoder生活を送っていたのですが、学習が突如止まることとなります。
C問題は学習に1問1時間程度かかった
昼休みや寝る前の時間を活用して学習していたのですが、
C問題でアルゴリズム力の不足を補うフェーズに入ると、隙間時間で勉強するスタイルが合わなくなってしまいました。
それだけであれば土日などに時間を取って続ければ良かったのですが...
コンテストの開催日程が直前まで決まらない
AtCoder ABCコンテストの開催はその週の水曜〜開催前日に告知されます。
週末夜を2日とも空けておくことが困難だった自分は、3週間ほどコンテストに参加できないことが確定した時点で、モチベが一気に下がってしまいました。
次にやりたいこと
仕事柄エンジニアリングやエンジニアに触れる機会が多く、周りの非エンジニアの皆が新しいツールやサービスを作っていることをうらやましく思っていました。
自分は作りたいものがなかったので、学習のモチベーションが続かず、3年位もやもやしていたのですが
AtCoderとの出会いはエンジニアリングとの距離を一気に詰めてくれる最高の体験でした。
今は他の仕事や趣味に興味が移っていますが
次の学習機会では
- AtCoderABCコンテストのC・D問題を本番で解いて、水色を目指す
- 簡単なポーカーの確率計算ソフト作成
あたりにチャレンジしたいなと思っています。