【色変記事】某国支社長61歳文系、入茶しました(初心者）

# (初心者）【色変記事】某国支社長61歳文系、AtCoder入茶しました！！

タイトル盛りぎみ。10人少しの小さな支社 ＋ 帰任決まりました( ；∀；)

<!--
:::note info
**自己紹介**
::::
-->
## 自己紹介
経済学部卒。某中堅電子部品メーカーに入社後ずっと営業畑（向いてない）。３か国目の駐在からもうすぐ帰任。生きがいは現場業務のデジタル化！紙嫌い（＝社内資料の話。本は好きです）・Excel好きだけどﾈ申Excel嫌い。触ってきたのはほとんどスクリプト言語（現場なので。VBA、PERL、PowerShell、Python等）。
モダンExcel（パワークエリ・パワーピボット）社内布教活動中。別途記事書きます。

<!--
:::note info
**AtCoderを始めたきっかけ**
::::
-->
## AtCoderを始めたきっかけ
自分と同じくプロITでない文系おじさんがプログラミングに挑戦するという日経クロステック連載[「大森敏行のプログラミングで行こう」](https://xtech.nikkei.com/atcl/nxt/column/18/00682/)が好きで毎回楽しみなんですが、筆者の大森さんがAtCoder挑戦を諦めたとの記事を読んで、じゃあそこだけ勝てるかも？と、こじらせ推しっぽい気も。まあもともとVBAとかのコーディングは好きでした。（話それますがPython始めてからVBA配列の不便さにいまさら悶絶してます）

<!--
:::note info
**環境**
::::
-->
## 環境
Windows10（新PC欲しい）・Python3・VS Code
ローカルで実行できる環境があるとやっぱり便利です。
コンテスト参加時はVSCで3ファイル開いてます。
1. メインのmyCode.py：提出コードをここでコーディング 
➡ ローカルPythonでサンプルテスト 
➡ OKならここから提出フォームに貼り付け
2. Jupyter Lab：覚えきれてないライブラリ関数の引数を確認したり、ちょこちょこ実験するのにメインのコードをグチャグチャにしたくないので VSCのJupyter Labプラグイン側でやってます。あとA問題➡B問題➡・・・と移る時に回答済みの提出コードをこっちにコピペして記録も。
3. 入力サンプル貼り付け用ファイル：[下で説明](#ローカルでサンプルテスト)しますが、サンプルをローカルで試験実行するときに、標準入力の代わりに①コードの上にコメントの形で貼り付け、か②ファイルから読み込み、を使い分けてます。
よくある2行入力（N=数字一つ、A=数列とか）の時は①ですが、メインファイルのコードの上に貼るんで、行数が多いと貼り付け・実行が面倒になるので別ファイルに貼り付けてます。

<!--
:::note info
**入茶時の状態**
::::
-->
## 入茶時の状態

**A・B問題：** 速解き頑張る（たまにBでハマる）
**C問題：** 5~7割くらい解ける。ここで時間使い切る。
**D問題：** 本番中解けた事一度もなし！（➡ [ABC392-D](https://atcoder.jp/contests/abc392/tasks/abc392_d)で初めて本番中AC出来ました）

[AtCoder Novisteps](https://atcoder-novisteps.vercel.app/)で言うと4Q～３Qですね. ５Qだと簡単、３Qは難しいけど3割～5割くらい解けるかも、そんな感じです。NoviStepsは自分のレベルがよく分かってありがたいです。
||覚えた・<br/>とりあえず使える|覚えてない・<br/>使えない|
|---|---|---|
|データ構造|リスト、set、<br/>dictionary、deque|Union Findとか<br/>セグ木とか何それ。|
|アルゴリズム|全探索・貪欲法・<br/>bit全探索・累積和|BFS/DFS・恐怖のDP・<br/>「〇〇法」全般|
|ライブラリ(Python)|itertools, collections, <br/>bisect||

まだ複雑なアルゴリズムを知らないので、C問題以降で「愚直にやったらTLE確実」といった時は dictionaryに頼ることがとても多いです。あと後述しますがライブラリで挙げた最初の２つは本当に良く使います。

<!--
:::note info
**入茶に役に立ったもの・こと**
::::
-->
## 入茶に役に立ったもの・こと

### ABC参加を続ける！
皆さん言っているようにたぶん一番大事（最近これだけに・・・）。仕事が忙しいと平日精進する時間も気力もなくなったりしますが、土曜の夜さえ何とか空けておけば続けられます（灰色当初は2完でもレート上がってくのでモチベーション上がりやすいし）。

### 過去問
基本これですね。AtCoder Problemと AtCoder NoviStepにはお世話になってます。作成者の皆様ありがとうございます！ 
ただ最近さぼって本番参加オンリーになってきてます。 いかん。

### ローカルでサンプルテスト
こういう風にサンプルケースを直接貼り付けて試すと便利[^1]。 「_INPUT = """\」から「"""」の間にサンプルケースを貼り付けて（[Ctrl]+[F5]）すると、そこを標準入力として実行します.（参照元URL失念しましたすみません）
```python
import io, sys
_INPUT = """\
2 3
10 5 7 
"""
sys.stdin = io.StringIO(_INPUT)   # Input from above _INPUT
# sys.stdin = open('D:/もにょもにょ/input.txt', 'r')  # Input from file

N, M = map(int, input().split())
...
```
 "sys.stdin = open("ファイル", 'r')の方のコメントを外すとファイルから読み込みます。
 入力行が多い時はこっちが便利ですね（毎回input.txtをセーブしてから実行、を忘れずに）。
 
[^1]: ただ上級者のYouTube見ると、ターミナルに直接貼り付けて入力にしている人が多いようなので、そっちが良いかもしれません（ｍ模索中）。


### VS Code/Pythonの「デバッガ」
これAtCoder入門記事などであまり触れられていない気がするので強調したいですが、めちゃ重要だと思います。自慢にならないけど自分のレベルだとけっこう**B問題でも使います**。

 コードに**変数の中身確認用 print 文いくつも入れている皆さん**　print()消し忘れて提出して、せっかくロジック合ってるのに無駄な WA 喰らった事ありませんか？（自分は何度もあります）　print文の代わりにデバッガ使いましょう！（後述のAtCoder Easy Testも併用で）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634429/496ba15c-a5cb-4db0-ba94-db1051b68e57.png)
ここからF11でforループの中を一行ずつ実行、変数の中身がどう変わるか見たりできます。

### ライブラリ（Python）
本来筆頭に挙げるべきかもしれません。自分はPythonで参加していますがこれまで以下のようなライブラリに助けられてきました：
#### itertools (combinations, permutations, product など）
何度もACをくれた**神ライブラリ**です。二重三重ループ避けたい時とか、bit全探索とか。
以下分かりやすかった記事です：
[Pythonで競プロをやる時にそこそこ使う書き方（itertools編）](https://qiita.com/uni745e/items/9823ce5cd9c279a12d8a)

#### collections (defaultdict, Counter, deque など)
dict[a] += 1 でキーaが存在しない時エラーになる対策が面倒なので defaultdictはよく使います。
Counterは数え上げ結果を辞書形式で持ってくれて便利です。dequeは・・・まだBFSが実装できないので使った経験ないかも。

分かりやすかった記事：
[競プロでも使える Python の便利な標準ライブラリ Tips](https://syakoo-lab.com/writings/20210711)　
itertoolsとcollectionsの両方を詳しく解説してくれています。

### X/Twitter
周りに競プロerいなくてもXにはたくさんいて嬉しい・・・ただ先人たちが書いているようにXで活発にポストしてる人達は**上澄み**なので、レーティングや解けなかった問題の差とかは気にしちゃダメです。当初は「大負け５完」とか上級者のポストを見てると、自分などがポストして良いのかと悩みましたが、気にしなくなりました。

とはいうものの**上級者にお願い**です（上級者はこの記事読んでないと思いますがww）。
「5完！負け」はともかく「5完！俺馬鹿だ」とかはできれば勘弁してください・・・下方にたくさんの庶民がおります。

### スクリプト
#### AtCoder Easy Test (Chromeプラグイン)
([v2](https://greasyfork.org/en/scripts/433152-atcoder-easy-test-v2) になってますね）
サンプルコピーしてローカル実行➡ OK！➡ 提出 ➡ あれ全部WA??（デバッグ用 print()文を消し忘れていた）という悲劇が何度かあったので大変助かってます。インストールすると通常の「提出」ボタンの横に「Test & Submit」と「Test All Samples」というボタンが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634429/8dd86737-003a-4c5c-a88b-3b45ff9f248e.png)

この「Test & Submit」ボタン、「サンプル全件通ったらそのまま提出・**通らなかったら提出中止**」を自動的にやってくれるんです。素晴らしい！　作者様本当にありがとうございます。

最近は速解き重視でA問題とかだと直接提出していますが（時々ジャッジが遅いのと、デバッガ使う事が増えてprint文あまり入れなくなったこともあり）、C問題以降は必須。

(2025/03/23追記：ABC398のA問題で直接出したらサンプルも合ってなかったという大ポカやらかしました。初心者はやっぱりA・B問題でも Easy Test経由が良いかも）

### エディタのダークモード（素人視点）
営業現場（≒ VBA界隈？）では **コード背景って白だと思ってたり**思ってなかったり（自分は思ってました）・・・デフォルト白なんで。　そういえばPowerShellのISEも白地ですね。

素人的には、プログラマーの方々がダークモード使ってるのを見て、なんか画面見づらそうだなぁ、 **単にカッコつけてるのかな？** とか失礼な事を思ってましたが、ふとした機会に自分でVSCをダークモードにして気付いたのは **予約語とか()とか変数の色分けがメチャ見やすい！** 
あまり居ないかもしれませんが初心者でエディタ白背景で使ってる人がいたらダークモード、お勧めします。

### その他
実戦でWA出た時に自分でコーナーケースを考える・作るのは役立ちました。N=1とか。
[ABC396 - C Buy Balls](https://atcoder.jp/contests/abc396/tasks/abc396_c)では WAx4が出た理由が分からずローカルで色々あやしい入力を試してみて、入力が下記の時WAになるのを発見できたので、対策を立てACできました：
> 2 2
> 5 -100
> -100 -100

<!--
:::note info
**競プロやって良かったと思う事**
::::
-->
## 競プロやって良かったと思う事

アルゴリズムとかまだよく知らないのであまり言えないのですが、例えば比較的入門編の「累積和」を知った時に大感動しました。なるほどその手があったか！と。大げさに言うと人類の叡智に触れてる感ありますね（競プロというかアルゴリズム勉強の話かもですが）。
あと単に楽しい。

#### コンテスト終了後の楽しみ
当日は終了直後感想をXに投稿したり、他の参加者の投稿見たり。翌日以降はYouTubeの実況放送を見るのが楽しいですね。推しは[岩井星人さん](https://www.youtube.com/channel/UCqlJwj9fWlVi26KeSb_e-og)。**AtCoderがちゃんとエンタメになっている**のが素晴らしい。最近（2025年3月）入水間近で、運上人になってしまいそうなのがちょっと寂しいです。
運上人といえば、[こたつがめさんの実況](https://www.youtube.com/@kotatsugame)は凄すぎてギャグの領域に入ってます。自分が100分間苦しみぬいて解けなかった問題を、軽やかに語りながらほんの数分で解いてしまうのを見る魔界体験、あまりのスピードに声を出して笑っちゃった事も実際あります。

<!--
:::note info
**その他**
::::
-->
## その他

#### レーティングについて
1年しかやっていませんが、最近全体にレベル上がってないですか？　
茶色だけど文系非ITのおっさんとしては頑張ってる方のはずだ！・・・と自分に言い聞かせてます。

<!--
:::note info
**今後の予定**
::::
-->
## 今後の予定
帰国後シニア社員としてなんと本社IT部門に受け入れてもらえました。自分のランク（茶）について「非ITのおっさんとしては」と言い訳できなくなるのがつらいかもですが、引き続き認知症予防も兼ねて頑張ります。

**しかし緑は遠い**・・・　そろそろ名前有りアルゴリズムちゃんと練習しないと！

追伸：
色々勝手にリンクを張っちゃっておりますが、もし問題ある場合ご連絡を頂ければすぐ外します。