プログラミングコース / 競技プログラミング
「解けた!」の気持ちよさを、
知ってほしい。
問題を読んで、考えて、書いて、提出して、正解する。競技プログラミングには、パズルを解くような楽しさがあります。
プログラミング未経験から、AtCoder などのコンテストに挑戦できるところまで。その楽しさを伝えるのがこのカリキュラムの目標です。
WHY COMPETITIVE PROGRAMMING
速く書くより、うまく考える。
競技プログラミングは、決められた時間の中で、与えられた問題を解くプログラムを書く競技です。日本では AtCoder のコンテストが毎週のように開かれ、小学生から社会人まで参加しています。
このカリキュラムが大切にしているのは、「どう考えれば解けるか」。ぜんぶ試す、半分にしぼる、つながりをたどる、前の答えをおぼえておく。
こうした考え方の「型」を一つずつ身につけると、はじめて見る問題にも手が出せるようになります。
考え方の型を順番に
全探索 → 二分探索 → グラフ探索 → 動的計画法。競プロで必要になる考え方を、やさしい順に積み上げます。
すべてオリジナル問題
迷路、リュック、ことば探し。子どもがイメージしやすい題材で、8x9が問題から作りました。
コンテストへの入口
ゴールはカリキュラムの修了ではなく、AtCoder などの本番のコンテストに自分から挑戦したくなることです。
FROM THE TEXTBOOK
実際の教材から
問題はすべてオリジナル。入力を受け取って答えを出力する、コンテストと同じ形で解きます。
大きな問題を、小さく分けて解く
数列の最大値を、左半分と右半分に分けて求めます。「分けて、解いて、合わせる」分割統治は、マージソートをはじめ多くのアルゴリズムの土台になる考え方です。
def find_max(numbers, left, right):
# ベースケース: 要素が1個
if left == right:
return numbers[left]
# 分ける
mid = (left + right) // 2
left_max = find_max(numbers, left, mid)
right_max = find_max(numbers, mid + 1, right)
# 合わせる
if left_max > right_max:
return left_max
else:
return right_max
n = int(input())
a = list(map(int, input().split()))
print(find_max(a, 0, n - 1))
CURRICULUM / Python
競技プログラミングへの道
— 31ステップで、AtCoder の入口へ。
プログラミング未経験からスタートし、Python の基本 → 全探索 → 二分探索 → グラフ探索 → 動的計画法へと、段階的にステップアップします。
問題はすべてオリジナル。「コードの書き方」よりも「どう考えれば解けるか」を重視しています。
Python の基本
ステップ 1〜11- 01プログラミングの基礎基本
オリエンテーション。プログラムを書いて動かす
- 03キーボードから読みとろう入力
入力と型変換。競プロの問題の読み方
- 07リストをあやつろうリスト
スライス・ソート・内包表記
- 11マスをぜんぶ調べよう二重ループ
二重ループで、マス目の地図からスタートとゴールを見つける
考え方の基本
ステップ 12〜16- 12プログラムの「速さ」を測ろう計算量
計算量。間に合うかどうかを、書く前に見積もる
- 13ぜんぶためせば答えが出る!全探索
全探索
- 15えらぶ?えらばない?全探索
bit 全探索
- 16ならべかえて一番いいのを選ぶ貪欲法
ソートと貪欲法
さがすテクニック
ステップ 17〜22- 17・18半分にわけてさがす魔法二分探索
二分探索(基本・応用)
- 19自分で自分をよぶ関数再帰
再帰
- 21合計のメモで一瞬で答える累積和
累積和
- 22大きな問題を小さく分ける分割統治
分割統治
つながりをたどる
ステップ 23〜27- 23つながりの地図をつくろうグラフ
グラフの基本
- 24・25近い順にしらべる探検探索
幅優先探索(BFS)と深さ優先探索(DFS)
- 26迷路を最短で抜けろ!最短経路
BFS / DFS の応用
- 27枝分かれの地図木
木構造
おぼえて解く
ステップ 28〜31- 28前の答えをおぼえておく作戦DP
動的計画法(DP)
- 29リュックに何を入れる?DP
ナップサック問題
- 302つの言葉のにているところDP
文字列の DP
- 31おぼえる作戦チャレンジ総合
DP の総合演習
IN THE REAL WORLD
この力が、使われている場所
「速く、正しく解く」ためのアルゴリズムは、毎日使うサービスの裏側で動いています。
カーナビや乗換案内
たくさんの駅や道の中から、最短の経路を一瞬で探すのはアルゴリズムの力です。
検索エンジン
膨大なデータの中から速く探し、並べ替える。探索やソートがその土台です。
IT企業の採用試験
エンジニアの採用では、アルゴリズムの問題を解くコーディング試験がよく行われています。
プログラミングコンテスト
AtCoder では定期的にコンテストが開かれ、中高生向けには情報オリンピックもあります。
OTHER TRACKS
プログラミングコースの、ほかの道
プログラミングコースには、興味に合わせて選べる4つの道があります。どの道から始めるかは、体験レッスンでお子さまの様子を見ながらご相談ください。
FOR PARENTS
保護者の方へ
プログラミング未経験でも大丈夫ですか?
はい。最初の11ステップで Python の基本(入力・条件分岐・ループ・リスト・関数・辞書)を学んでから、競技プログラミングの考え方に進みます。
算数・数学が得意でないと難しいですか?
算数が得意だと有利な場面はありますが、このカリキュラムで扱うのは計算力より「考え方」です。問題を小さく分けて、試して、確かめる。その積み重ねを大切にしています。
どのコースで受けられますか?
プログラミングコース(小学校高学年〜・月2回・90分)で取り組みます。どの道から始めるか、どこまで進むかは、お子さまの興味と進み具合に合わせて講師と決めていきます。まずは無料体験レッスンでご相談ください。