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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
dhirabayashi
June 15, 2024
Technology
560
0
Share
JVM言語でもできる、競技プログラミング
JJUG CCC 2024 Spring
2024年6月18日(日) 10:25 - 10:45
dhirabayashi
June 15, 2024
More Decks by dhirabayashi
See All by dhirabayashi
「O(n log(n))のパフォーマンス」の意味がわかるようになろう
dhirabayashi
1
460
Javaエンジニアのための低コストKotlin入門
dhirabayashi
0
1.9k
Other Decks in Technology
See All in Technology
Claude Code で使える DuckDB Skills を試してみた / DuckDB Skills and Claude Code
masahirokawahara
1
720
全社統制を維持しながら現場負担をどう減らすか〜プラットフォームチームとセキュリティチームで進めたSecurity Hub活用によるAWS統制の見直し〜/secjaws-security-hub-custom-insights
mhrtech
1
560
分断された OT と IT を繋ぐ架け橋 -Kubernetes が切り拓く 産業用組み込み製品の現在地 -
yudaiono
1
120
AI 時代の Platform Engineering
recruitengineers
PRO
1
220
20260515 ⾃分のアカウントとプライバシーを守る認証と認可の話〜利⽤者向け〜
oidfj
0
700
AI-Assisted Contributions and Maintainer Load - PyCon US 2026
pauloxnet
1
170
Gaussian Splattingの実用化 - 映像制作への展開
gpuunite_official
0
200
ESP32 IoTを動かしながらメモリ使用量を観測してみた話
zozotech
PRO
0
140
Terragrunt x Snowflake + dbt で作るマルチテナントなデータ基盤構築プラットフォーム
gak_t12
0
410
Claude Code / Codex / Kiro に AWS 権限を 渡すとき、何を設計すべきか
k_adachi_01
5
1.7k
そのSLO 99.9%、本当に必要ですか? 〜優先度付きSLOによる責任共有の設計思想〜 / Is that 99.9% SLO really necessary? Design philosophy of shared responsibility through prioritized SLOs
vtryo
0
810
クラウドからエッジまで ~ 1,700台を支える監視設計~
optfit
0
110
Featured
See All Featured
BBQ
matthewcrist
89
10k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
150
A Modern Web Designer's Workflow
chriscoyier
698
190k
sira's awesome portfolio website redesign presentation
elsirapls
0
240
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
540
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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でも戦える