.memo (kikugawa816 blog)

自分用の(WEB につなげれば見れる)と便利なメモして使う

「アルゴリズムとデータ構造」の勉強方針、AtCoder について

なぜ勉強するのか

  • この分野を今までできちんと勉強したこと無い
  • プログラミングをする上で最低限の実力として身につけていないとまずいと個人的に感じている
    • 計算量等は知識として持っているが、実際に意識してコードが書けているかは微妙なところ
  • AtCoder のレートが高い人に憧れを感じるので
  • 簡単には伸びない力で、時間をかける必要があると、思うので
    • 将棋でいう「読み」の力の類だと思う。長手数の詰将棋を解き続けることで伸ばしていくような。

現在の実力

以前何回か AtCoder の ABC に参加した際に、A, B 問題はスムーズに解けるが他は無理、程度の実力。 C 問題は少し解けたりもしたが、AtCoder Problems での Difficluty で 300 ぐらいのが解けたぐらい。 またアルゴリズムの力に直結する数学力についても、受験勉強の経験が無いので期待できないと言ったところ。 (ただし劣等感やアレルギーを感じている英語と違って、むしろ好きだと感じている)

直近の勉強の方針

  • AtCoder & AtCoder Problems を活用する
  • AtCoder Problems で Difficluty を見た時に 400 - 1200 (茶 - 緑あたり)の問題を「解説の理解や写経」を中心に行う
    • 詰将棋。答えを見たほうが伸びる方式
    • 数学的な話題 (多重集合や漸化式、etc.) については、Webや書籍で調べながらで、かつ時間をかけながらなら、なんとか理解はできるので
    • 問題を最初に読み、解けそうだと思ったならやってみる
  • 買い揃えた書籍 (けんちょん本、螺旋本、蟻本と青チャート)は上記をやりつつ、解説に出てきたテクニックの理解や習得に活用
  • 言語は C++ と、普段仕事で使っている Python3 も使いつつといった感じ
    • C言語の知識は多少ある。C++ は無い
    • 独習 C++ を上記の勉強で出てくる際に読みながら
      • 「言語仕様を一通り読んで理解する」のようなエリートなやり方で理解できる頭になってない
      • 以前一度頭から読もうとしたら「飽きる〜やめる」のいつものパターンになったので
    • Python については、ライブラリを知る良いきっかけと、C++ をスムーズに書けるまではコンテストで使うので
  • 「コンテストには必ず参加する!」のような気合はいれない
    • 気合を入れすぎると、「疲れてやめる 〜 復帰するまでの間が長くなる」までのこれまたいつものパターンになるので

一行でまとめると以下

「解説を読みつつ、理解したことをブログにメモする」