プログラミング未経験者がAtCoderを始めてみた

プログラミング未経験者がたまたま競技プログラミングを知って
PythonでAtCoderを始めたので初記事にします。

## プログラミング経験について
私自身は情報系出身でもないし仕事でプログラムを組むこともなかったので、プログラミングについては学んだことはなかったです。
ただ、プログラミングやLinux要素を盛り込んだゲームが好きで遊んでいたのでプログラミング自体には興味を持っていました。
#### 遊んでいたゲーム例
- [TIS-100](https://store.steampowered.com/app/370360/TIS100/ "Steam")
![ss_8ac71a25dc13d789213f9edeff9ece1ee58e5d81.600x338.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4087782/b5ae2f08-aaef-4e5c-9bdd-c512c44940e4.jpeg)
- [Hacknet](https://store.steampowered.com/app/365450/Hacknet/ "Steam")
![ss_182ebf5aa570fc0ad0d1d974d43137e858ddeb54.600x338.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4087782/cea62232-8887-49c7-88fc-4a1d0af58da7.jpeg)
- [Replicube](https://store.steampowered.com/app/3401490/Replicube/ "Steam")
![ss_97629b58f724349b8a2dc06944ba8c26d03745de.600x338.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4087782/6c52c08f-1dc0-4069-91c5-d5c583333534.jpeg)
## 競技プログラミングを知ったきっかけ
競技プログラミングについて知ったのはYouTubeでお勧めに出てきたこの動画だったはず。
[競技プログラミングとは？【ゆっくり解説】](https://youtu.be/ZHjeEmKmSLc?si=loOFv6HGYNotHvGZ "YouTube")
そしてすぐにテレ東BIZさんのこちらの動画を見て興味を持った。
[未経験者のアナタもハマる？競技プログラミング「AtCoder」って何だ？【橋本幸治の理系通信】（2021年3月19日）](https://www.youtube.com/watch?v=WGNQrH0AV2k "YouTube")
もともと前章で触れたようにプログラミング要素のあるゲームが好きだったのでパズルゲームとしてAtCoderをやってみたいと思ったのがきっかけです。
## 初めての環境構築
そもそも環境構築が必要だというのも知らない状態だったので、何もわからないまま競技プログラミングを知ったきっかけの動画シリーズにあったこちらの動画にそのまま従いしました。
[競技プログラミングの環境構築 [VSCode+WSL+AtCoder Library]【ゆっくり解説】](https://youtu.be/uhnASau7fB4?si=6_j6xZjaJfkz2XGM "YouTube")
AtCoder Libraryが何なのかはいまだによくわかってないし、結局PythonでAtCoderを始めたのでこの動画で環境構築してよかったのか微妙な気がします。
## Pythonを選んだ理由
もともと使えるプログラミング言語なんてないのでなんでもよかったが、AtCoderの使用言語ではC++が一番多くてPythonが次点ってことでこの二つの言語についてどんな言語なのか比較してみた。
その結果Pythonは何をやっているか何となく読み取れたがC++については何言ってるかさっぱりだったのでPythonを覚える事に決めた。
ただ実際PythonでAtCoderに参加していると解説にPythonが入っていないことも多いし、試しにPythonで書いたプログラムをAIチャットでC++に変換して投稿してみたら本当に処理速度が速くてちょっと失敗したかもと思っている。
## Pythonのお勉強
Pythonの勉強は競技プログラミングで必要な知識がわからないので、AtCoder公式で用意している下記のPython入門を利用し、「2.04.多次元配列」まで勉強した。
[Python入門 AtCoder Programming Guide for beginners (APG4bPython)](https://atcoder.jp/contests/APG4bPython "AtCoder")
※というか改めて見てまだ全部終わらせてなかったことに気づいてなかった。

その後はA問題を50題ほど解いて、B問題を10題ほど解いた状態で初めてのコンテストに挑戦した。
今現在はB問題をさらに練習していて下の画像のような状態。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4087782/90c7ebf5-52aa-4b1f-b595-74469dc43f6e.png)
A問題で引っかかることはほぼないけどB問題はアイデアが出てこなかったり、アイデアが出てもプログラムに落とし込めなかったりでまだまだ反復練習が必要そう。

## 初コンテスト結果
始めて参加したのは25/05/24に行われた [AtCoder Beginner Contest 407](https://atcoder.jp/contests/abc407 "AtCoder") で、結果としてはAB2完に終わった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4087782/b87e14dd-7311-42dd-813d-2720b706d50c.png)
- A問題
なぜか正の整数で答えなきゃいけないと思い込んで2回WAを出した。
- B問題
特に何もなくすんなりAC
- C問題
後ろから逆算していけば行けるはずと思いこの問題だけで1時間以上かけたが3つ目のサンプルがどうしても合わずにタイムアップ。
解説や他の挑戦者の投稿を見て改めて前から処理して最後だけちょっと手を加えたら5分でACできた。
解説見ただけですぐに解決法わかっただけに悔しかった。

## 今後
今後はB問題の練習を続けて、ある程度解けるようになったらC問題の練習に挑戦していきたい。
ただ、パズルゲームとしてAtCoderをやってるので難しくて辛くなるようだったら低難度の問題で楽しんでいくだけになるかも。
コンテスト自体はABC開催の機会を逃さずに毎回参加していつか茶色コーダーになれたら面白いかなと思っている。
もし茶色コーダーになれたら色変記事で「プログラミング未経験から茶色コーダーになりました！」みたいなのを書こうと思います。
PythonでAtCoderを続けて頭打ちになって飽きそうになったらC++を勉強してもう一度A問題から遊ぶかもしれない。
環境構築で参考にした動画の影響でC++の環境はできているので実はハードル高くないと思ってる。

## 最後にこの記事を書こうと思った理由
AtCoderをやっていてどうしてもコードに落とし込めないとき、やりたいことをgoogleで検索すると高確率でQiitaの記事にぶつかるし、AtCoderの諸先輩の経験についてもたくさんあって参考になってるので自分も書いてみたくなった。
あと、もし競技プログラミングで困ったことがあったらコメント等でアドバイスもらえたりしそうだから参加しておこうと思った。

皆さんよろしくお願いします。