Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JVM言語でもできる、競技プログラミング
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
dhirabayashi
June 15, 2024
Technology
0
540
JVM言語でもできる、競技プログラミング
JJUG CCC 2024 Spring
2024年6月18日(日) 10:25 - 10:45
dhirabayashi
June 15, 2024
Tweet
Share
More Decks by dhirabayashi
See All by dhirabayashi
「O(n log(n))のパフォーマンス」の意味がわかるようになろう
dhirabayashi
1
400
Javaエンジニアのための低コストKotlin入門
dhirabayashi
0
1.8k
Other Decks in Technology
See All in Technology
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
4
1.1k
Claude Code Skills 勉強会 (DevelersIO向けに調整済み) / claude code skills for devio
masahirokawahara
0
7.2k
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
2.9k
製造業ドメインにおける LLMプロダクト構築: 複雑な文脈へのアプローチ
caddi_eng
1
540
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
850
LINE Messengerの次世代ストレージ選定
lycorptech_jp
PRO
19
7.7k
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
120
8万デプロイ
iwamot
PRO
2
200
マルチロールEMが実践する「組織のレジリエンス」を高めるための組織構造と人材配置戦略
coconala_engineer
3
670
EMからICへ、二周目人材としてAI全振りのプロダクト開発で見つけた武器
yug1224
5
510
事例に見るスマートファクトリーへの道筋〜工場データをAI Readyにする実践ステップ〜
hamadakoji
1
260
Ultra Ethernet (UEC) v1.0 仕様概説
markunet
3
240
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Faster Mobile Websites
deanohume
310
31k
It's Worth the Effort
3n
188
29k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
380
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
170
Unsuck your backbone
ammeep
672
58k
The SEO identity crisis: Don't let AI make you average
varn
0
410
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Typedesign – Prime Four
hannesfritz
42
3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
Transcript
JVM言語でもできる、競技プログラミング JVM言語でもできる、競技プログラミング JJUG CCC 2024 Spring Daiki Hirabayashi
2 自己紹介 いわゆるシステムエンジニア – Javaをちょこちょこと – 最近はサーバサイドKotlin 平林 大輝 株式会社テクニケーション
– 2021年~ 現職 X (Twitter): @dhirabayashi64 競プロ歴について – 2022年から本格的に開始 – 実力は普通
3 話すこと • 競技プログラミング(競プロ)って何? – 概要 – 面白さや難しさ • 使用するプログラミング言語の話
• 面白さや実益についての実感
4 前置き • 競プロといってもいろいろある • 以下はAtCoderというサイトのABCというコンテスト前提
5 競技プログラミング(競プロ)とは? • プログラミングを使って問題を解くゲームみたいなもの • 参加者全員に同じ問題が与えられ、それを解くコードを書く • 正解するコードを書いたら得点が得られる • 多くの得点を獲得することを目指す
– 得点が高い人ほど上位 – 得点が同じなら早く正解したほうが上位
6 競プロで取り組む「問題」 たとえば以下のような感じ 出典: https://atcoder.jp/contests/abc169/tasks/abc169_a
7 競プロで取り組む「問題」 • 回答例
8 書いたコードは提出する
9 提出コードすると? • 提出したコードに対して即座にテストが実行される – 入力に対し、出力が期待値通りかどうか – 実行時間、メモリ使用量が制限を超えていないか
10 提出結果 →AC(Accepted): 正解
11 もうちょっと難しい問題 出典: https://atcoder.jp/contests/abc346/tasks/abc346_c
12 もうちょっと難しい例
13 もうちょっと難しい例
14 実装例(?)
15 提出結果… →TLE(Time Limit Exceeded): 実行時間超過
16 ダメな理由 →20億回ループが回るので間に合わない
17 どうやって解くか →こっち(20万件)なら全部見ても間に合う
18 どうやって解くか • 「現れないもの」の合計 – 2 + 4 + 5
= 11 • 「全部の合計」から「現れるもの」を引いても同じ! – 1 + 2 + 3 + 4 + 5 = 15 – 15 – (1 + 3) = 11
19 正解例
20 正解例 →1からKまでの合計を求める関数を作る。計算で求めるので速い
21 正解例 重複を排除 1からKの合計値を求める 現れる数を引く 最大20万件なので十分速い
22 提出結果 →AC!
23 競プロとプログラム実装 • ただの実装作業ゲーとは限らない – それなりに頭を捻ることになる – プログラムの実行時間も考える必要がある • ちゃんと実装しきる必要もある
– やってみると意外と大変…
24 プログラミング言語について • AtCoderの場合、メジャーな言語ならだいたい使える • 実際に使われているのは圧倒的にC++ – 次点でPython – だいたいどちらかがおすすめされる
• それら以外の言語も全く使われないわけではない
25 使用言語についての私見 • 好きなのを使えばいい – せっかくいろいろ対応しているので • 個人的にはKotlinを使っている – そんなに問題なくて2年くらい使っている
26 JVM言語(Kotlin)を使って得た実感 • そこそこ安心できる実行速度 – オートボクシング/アンボクシングで遅いことはある • バグなく実装しやすい – コンパイラのチェック、型安全性
• fluentなリスト操作は競プロでも活きる(※私見) • 不利な点も – 公式解説のコードはだいたいC++かPythonで書かれる – C++やPythonにあるがJavaやKotlinにはないライブラリも
27 競プロに取り組んで得た実感 • 実装力が鍛えられる – ちゃんと動くコードを素早く書く必要がある – 入念に動作確認している時間がない • 業務外で日常的にプログラミングする手段になる
– 作る物のアイデアがなくてもプログラミングできる – テストされるのでそれなりにちゃんと書く必要がある • プログラミングが楽しいと思えた
28 辛い点も… • それなりに時間を吸われる – コンテスト参加のための時間 • 提出が通らないが全然原因がわからないことも • 良い成績がとれるとは限らない
• 身につく力の範囲は局所的
29 代表的なコンテスト • AtCoder Beginner Contest(ABC) – オンラインコンテスト – ほぼ毎週開催される
• だいたい土曜日(たまに日曜日) • 21:00 ~ 22:40の100分間 – 直近では7問出題される • 難易度が幅広いのでだいたい誰でも参加できる
30 まとめ • 競プロは日常的にプログラミングする手段の一つとなる – 個人開発のネタがなくてもプログラミングできる – 実装力を鍛えられる – 楽しい
• 始めるならAtCoderがおすすめ • JavaやKotlinでも戦える