この記事はSYSKEN Advent Calendar 2017 5日目の記事です。
2回目の投稿になります。ふぃらっはです。
今年の秋あたりから競技プログラミングというものを始めたので,競技プログラミングの簡単な紹介と,これまで自分が何をやってきたのかについて書いていこうと思います。
そもそも競技プログラミングとは?
きわめて乱暴に言うと,プログラムにパズルみたいな問題を解かせる競技です。
たとえば,以下のような問題が与えられます。
yukiさんは一袋 K 粒だけ豆が入った袋を N 袋拾いました.
ところで,節分には年齢の数だけの豆を食べる習慣があります.
yukiさんの家族は F 人家族で,それぞれの年齢は A1,A2,…,AF歳です.
それぞれが年齢の数だけの豆を食べたら最終的に何粒残るかを求めて下さい.
ただし,全員が年齢の数だけ豆を食べることができないなら -1 を出力して下さい.
(https://yukicoder.me/problems/361 より引用)
問題文に沿って,適当なK,N,F,A1,A2,……AFが入力された際,題意を満たすような出力をするプログラムを書く,というのが目的です。
プログラミングといったら普通はゲーム制作やシステム開発をイメージすると思いますが,競技プログラミングでは,どちらかと言えば数学寄りの技能が要求されます。そのため,プログラミングを勉強したはいいものの特に何か作りたいわけでもない人,作りたいものが思い浮かばない人などにオススメです。
また,ゲームやサービスをバリバリ作りたい人でも,実装力やアルゴリズムの知識をつけるトレーニングになるので,開発の息抜きがてらチャレンジしてみるのもいいかもしれません。
自分がこれまでにやったこと
そもそものはじまり
9月にパソコン甲子園という競技プログラミング大会の予選があり,シス研の活動の一環として参加しました。
予選に参加したころはまだ競技プログラミングについて全然知らず,フィーリングで問題を解いていたんですが,地域枠という制度もあって予選を通過してしまいました。
どうせ本選に参加するならちゃんと勉強してみようと思い,競技プログラミングの門を叩くことになりました。
何をやったのか
ひたすら問題を解きました。競技プログラミングの問題はyukicoderやAtCoder,AOJといったサイトで公開されています。
あまり知識のない状態だとすぐに壁にぶつかります。問題を解く際に使えるいくつかの技法があるので,それも勉強しました。たとえば,幅優先探索,二分探索,動的計画法,メモ化再帰などです(このあたりは気になったら調べてみてください)。
最近では,AtCoderが定期的に開催しているコンテストにも参加するようになりました。普通に問題を解くのと違い,コンテストは同時に世界中の人々が参加し,同じ問題を解くことになります。時間制限があって順位がつくという環境で問題を解くのは,いい感じの緊張感があって割と楽しいです。
まだまだ競技プログラミング歴は浅く,大した実力があるわけでもありませんが,精進を重ねて色んな問題を解けるようになっていきたいと思います。
おわりに
かなりグダグダした文章になってしまいましたが,最後までお読みいただきありがとうございました。
明日の SYSKEN Advent Calendar 2017 6日目は縣さんがお届けします。お楽しみに!
コメントを残す