概要
毎日PaizaのC~B問題をやっているが、一向に上達しない!
なぜ上達できないのか?なぜ自信を持ってプログラミングできないのか?
悔しいので、プログラミングを上達するための考え方を備忘録として記載します。
1. 問題を「言葉」で分解して理解する
まず、 「問題を日本語で考える」
プログラムを書く前に、手順や動作を言葉で説明してみる。
例:
「入力で与えられた数字を読み込む」
「各投票番号について、当選番号リストに含まれているか確認する」
「含まれていれば、IDをメモする」
「含まれていなければ-1を出力する」
このように 自然言語で書くことで、コードの全体像 が見えてくる。
💡ポイント
問題の処理が ステップごとに何をすればいいか がはっきりすれば、ロジックも組みやすくなるのではないか。
「分解する→シンプルにする→コードにする」 という流れを意識してみる。
2. 小さな単位に分解して考える
問題を解くときに 「一気に解こう」としない。
例:
「まずデータを読み込む」
入力されたデータを、リストや変数に格納する。
「当選番号リストを用意する」
「投票番号を1つずつ調べる」
「当選していればIDを出力する」
これを1つ1つ 正しく動くか確認しながら進める。
すべてを一度に解決しようとすると、エラーやバグに対応しきれなくなる!
3. サンプルを作って実験する
ロジックを考えるときは、 具体的な数字で頭の中でシミュレーションする。
例:
当選番号リスト = [765, 876, 961, 346, 315, 283]
投票番号リスト = [13, 39, 52, 346, 190, 49, 283, 28]
手作業で「346」と「283」が当選することを確認する。
頭の中で一度「結果はこうなるはず」と明確にしておくことで、ロジックを組む際の迷いが減る。
4. 書いたコードを段階的にテストする
「最後まで書いてから実行する」 という方法は、バグを見つけにくい。
途中経過を出力しながら進める ことで、エラーの原因を早めに発見できる。
まずは、読み込んだデータが正しく表示されるかチェック
次に、1つの投票番号が当選しているか確認
すべての投票番号を調べるループが動いているか確認
途中で print() 文を使って、現在の状態を確認する 習慣を!
5. エラーや間違いを成長のチャンスにする
エラーが出たり、解けなかったりするのは誰でもある(はずw)。
重要なのは 「なぜそのエラーが出たのか」を考えること。
NameError → 変数や関数名を間違えている
IndexError → リストの長さを超えたインデックスを参照している
TypeError → 型の違う値を操作している
エラーを 「バグのヒント」 として活用すると、エラーの原因に強くなれ!
6. 同じ問題を何度もやる
1度解いた問題を、 1週間後や1か月後にもう一度やることで、考え方を定着させる。
ただやみくもに新しい問題を解くより、 反復して頭の中にロジックを刻む。
まとめ
- 問題を言葉で説明して、分解して考える
- 小さな単位に分けて順番に処理する
- 実験しながら正しい動きを確認する
- エラーをヒントにして改善していく
- 同じ問題を繰り返してロジックを鍛える