大学生は『競プロ』と『kaggle』をやろう!
はじめに
みなさん、こんにちは。EpicAIでエンジニアをしている森岡です。大学生になって受験勉強から解放され、目標を失っている人は多いのではないでしょうか。大学では高校生の頃のような過剰な受験戦争や部活などから一度解放されることとなります。
その結果多くの人は恋愛を楽しんだり、サークル活動やバイトに注力したりします。もちろん、そのような生活も大事ですが、何か物足りなくないですか?新しい目標を見つけたくないですか?
大学の貴重な4年や6年を何か有意義なことに使いたいと考えている人も多いのではないでしょうか。しかし、そういう人が行き着く先といえば、たいてい大学のGPAやTOEICなどになっています。もちろん、これらも素晴らしいと思いますが、何かもっと自分は可能性を秘めているのではないか?もっと自分が打ち込める面白いやりこみ要素があるものがないか?そう思っている人も多いと思います。
そんなあなたが打ち込むべきものこそ、 競技プログラミング や kaggle なのです。※諸説あります。
なぜ『競プロ』と『kaggle』なのか?
競技プログラミングやkaggleはPC1つで始めることができます。そして、大学1年生から取り組むことができるのです。大学の研究などは基本的に4年生からですし、AI系の学部や研究室に所属していなければ研究すらできません。しかし、競技プログラミングやkaggleはどんな人でも、どこにいる人でも始めることができるのです。
たいていの人が競技プログラミングやkaggleを大学生や社会人から始めるため、皆同じスタートラインから勝負を始めることとなります。しかも、やりこみ要素が多いため、時間をかけて実績を積み上げていくことができます。
競技プログラミングであれば、色ごとにレーティングが分かれており、kaggleはメダルや称号などを目標に取り組むことになります。就活やインターンなどの面接受けも良いですし、競技プログラミングなどはコーディングテストで役に立つことも多いです。競技プログラミングとkaggleは強いエンジニアかどうかを図る1つの指標としても機能していますので、ぜひぜひ多くの人に取り組んでいただきたいのです。
競技プログラミングとは?
競技プログラミング(通称:競プロ)とは、制限時間内にアルゴリズムの問題を解き、その正確さと速さを競う競技です。
出題される問題は、与えられた条件を満たすプログラムを書いて答えを出す、というシンプルな形式ですが、その中身はとても奥深いものになっています。
問題の難易度は幅広く、
- for文とif文だけで解ける初心者向けの問題
- データ構造やグラフ、動的計画法などを駆使する難問
まで用意されています。そのため、プログラミング初心者から上級者まで、同じ舞台で段階的に成長できるのが大きな特徴です。
また、多くの競技プログラミングサイトでは「レーティング」という数値で実力が可視化され、色(灰・茶・緑・水・青…など)でランク分けされます。
努力すればするほど目に見えて成長が分かり、ゲーム感覚で強くなっていけるのも魅力です。
競技プログラミングを通して身につくのは、
- 論理的思考力
- 問題を分解して解決する力
- 高速で正確なコーディング力
といった、エンジニアとして一生使える基礎体力です。
実際、就活やインターンのコーディングテストで「競プロ経験者」が有利になる場面は非常に多くあります。
AtCoder
競技プログラミングをはじめるには、AtCoderがおすすめです。
AtCoderでは日本語で競技プログラミングを楽しむことができます。2026年1月現在で毎週土曜日の21:00~開催されるAtCoder Beginner Contestでは、10000人近くの方が参加しています。
ABCは7問制となっており、直近の傾向では3問速解きor4問完答で茶色、4問速解きor5問完答で緑色のパフォーマンスを得られます。(※筆者の独断です。)
プログラミング初心者でAtCoderを始める方は、半年で茶色、1年で緑色あたりを目指すのが良いかと思います。
例題1
ここで、競技プログラミングの問題の例題を解いてみましょう。
競プロらしさを一気に体感できる問題として、
ABC086 C - Traveling を紹介します。
🔗 問題リンク
https://atcoder.jp/contests/abc086/tasks/arc089_a
問題概要(要約)
- 初期位置は
(0,0)、時刻0 - 時刻
tに座標(x,y)に到達できるかを順番に判定する - 1秒ごとに上下左右へ1マス移動できる
「すべての指定された時刻・座標に到達できるなら Yes、無理なら No を出力せよ」という問題です。
解法のポイント(思考の核心)
前の地点 (t0, x0, y0) から次の地点 (t1, x1, y1) に移動するとき、
- 必要な最短距離
dist = |x1 - x0| + |y1 - y0| - 使える時間
dt = t1 - t0
以下 2つの条件を両方満たす 必要があります。
-
dist <= dt
→ 物理的に時間内に間に合うか -
(dt - dist) % 2 == 0
→ 余った時間で足踏み(往復)ができるか
この「距離+偶奇判定」は、競技プログラミングで非常によく出てくる重要な考え方です。
実装例(C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
cin >> N;
int t0 = 0, x0 = 0, y0 = 0;
for (int i = 0; i < N; i++) {
int t1, x1, y1;
cin >> t1 >> x1 >> y1;
int dt = t1 - t0;
int dist = abs(x1 - x0) + abs(y1 - y0);
if (dist > dt || (dt - dist) % 2 != 0) {
cout << "No\n";
return 0;
}
t0 = t1;
x0 = x1;
y0 = y1;
}
cout << "Yes\n";
return 0;
}
例題2
あるロボット工場で、頭パーツと体パーツの重さが与えられる。
頭の軽い方から K 個、体の軽い方から K 個を選んだとき、全て「頭 ≤ 体」になるかを判定する問題です。
✅ 解法(直感)
- 頭と体のリストをそれぞれソートする
- 軽い方から K 個ずつ取り出して比較
- 条件が成立すれば
Yes、そうでなければNo
実装例(C++)
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, m, k;
cin >> n >> m >> k;
vector<int> H(n), B(m);
for(int i=0; i<n; i++) cin >> H[i];
for(int i=0; i<m; i++) cin >> B[i];
sort(H.begin(), H.end());
sort(B.begin(), B.end());
bool ok = true;
for(int i = 0; i < k; i++){
if(H[i] > B[m-k+i]){
ok = false;
break;
}
}
cout << (ok ? "Yes" : "No") << endl;
return 0;
}
まとめ
競技プログラミングの面白さは、「プログラミングができるようになる」こと自体ではありません。
問題を読んで、条件を整理して、必要な情報だけを抜き出し、最小限のロジックで解決する。この一連の思考プロセスそのものが、パズルやゲームのように楽しいのです。
今回紹介した
- ABC086 C - Traveling のような「距離+偶奇判定」
- ソートして比較するだけで解ける最近の ABC 問題
これらは一見シンプルですが、
「考え方を知っているかどうか」で難易度が激変します。
これが競技プログラミングの最大の魅力です。
kaggleとは?
kaggle(カグル)は、世界最大級のデータ分析・機械学習の競技プラットフォームです。
企業や研究機関が提供するデータセットに対して、「このデータから最も精度よく予測せよ」「最も良いモデルを作れ」といった課題が出され、世界中の参加者がその性能を競います。
kaggleの面白さは、単にコードを書くことではありません。
- データをどう前処理するか
- どんな特徴量を作るか
- どのモデルを選び、どう改善するか
といった、試行錯誤そのものが競技になります。
正解が1つではなく、工夫の数だけアプローチが存在するため、非常にクリエイティブな世界です。
また、kaggleでは成績に応じて
- Bronze(上位10%) / Silver(上位5%) / Gold メダル(上位10人)
- Expert(銅メダルx2) / Master(金メダルx1、銀メダルx2) / Grandmaster(金メダルx5) といった
称号が与えられます。これらは世界共通の実績として認識されており、海外・国内問わず強力なアピール材料になります。
特にAI・データサイエンス分野では、
「kaggleの実績 ≒ 実務能力」
と見なされることも多く(※諸説あり)、研究室に所属していなくても、自力で世界レベルの成果を出せる場所がkaggleなのです。
競技プログラミングが「アルゴリズム力」を鍛える世界だとすると、
kaggleは
- データを理解する力
- 仮説を立てて検証する力
- 改善を積み重ねる力
を徹底的に鍛える場所です。
ここでは、最近のkaggleで開催されたコンペを2つ紹介します。
Mitsui Commodity Prediction Challenge
🔗 https://www.kaggle.com/competitions/mitsui-commodity-prediction-challenge
コンペ概要
三井物産が主催するコモディティ(商品先物)の価格予測コンペです。
各種商品(金属、エネルギー、農産物など)の将来価格動向を過去の市場データから予測することが目標になっています。
金融・経済モデルの強みが問われるテーマで、安定した予測モデル構築と動的変化の捉え方が重要となります。
どういうコンペだったか(解法の雰囲気)
- 価格データやマーケット情報が与えられ、未来の価格を予測する
- タイムシリーズや特徴量設計が中心
- 初心者でも参加しやすいように チュートリアル Notebook あり
- 金融系データ特有の落とし穴(例:未来情報の漏れ)に注意しながら学べる内容でした
Drawing with LLMs
🔗 https://www.kaggle.com/competitions/drawing-with-llms
コンペ概要
与えられたテキスト(説明文)をもとに SVG 画像を生成するという新タイプのコンペです。
単なる予測ではなく、「文章 → 画像コード(SVG)」 に変換するモデルを構築します。SVG 出力はテキストとして評価されるため、生成 AI の挙動や構造化テキスト生成の工夫が求められました。
どういうコンペだったか(解法の雰囲気)
- テキスト説明を SVG (可縮性ベクター図形)に変換するタスク
- 提出形式が Kaggle Packages(predict() を実装したパッケージ形式)
- LLM(大規模言語モデル)を活用しつつも、SVG の制約(タグやサイズ制限など)が工夫点になった
まとめ
kaggleの面白さは、
「機械学習ができるようになる」ことそのものではありません。
データを眺めて「何が効きそうか」を考え、仮説を立てて実験して失敗して少しだけ良くなる。この 試行錯誤のループ そのものが、
kaggleの一番おもしろいところです。
今回紹介したように、
-
Mitsui Commodity Prediction Challenge のような
→ 実社会と直結した時系列・金融データの予測 -
Drawing with LLMs のような
→ 正解が1つではない、生成AI×構造化出力の問題
kaggleには、
「こんな問題、普通の授業じゃ絶対やらないだろ」
という課題がゴロゴロ転がっています。
しかも、高価な環境はいらない、研究室に所属していなくてもいい、肩書きや年齢も関係ない 。
Notebook1本で、世界中の強者と同じ土俵に立てる。
最初は、スコアが全然伸びない、何をしているのか分からない、上位勢が何を言っているのか理解できない。それが普通です。
でも、
「昨日より少し良い提出」ができた瞬間、
kaggleは一気に面白くなります。
インターンの探し方
ではここまでで鍛えることのできる力を、実際に業務に生かしてみたくはありませんか?その1つの方法がインターンです。ここでいうインターンとは、3日や1か月程度のものではなく、スタートアップなどで数か月~1年以上働くもののことを指します。
EpicAIでもインターン生を募集しておりますので、ぜひ応募ページからご応募ください。
また、インターンを探すうえでおすすめのサイトを上げておきます。
AtCoder Jobs
このあたりのサイトから探していくのが無難かと思います。
大学1年生から申し込めるものもあるので、ぜひ様々な企業でインターンしてみてください。
Discussion