はじめまして、19のebiです。AtCoderで楽しく競技プログラミング(以下 競プロ)をしてたりしています。
この記事は東京工業大学デジタル創作同好会traP アドベントカレンダー2019 38日目の記事です。今回は19にコンピューターサイエンス[1]という講義でPythonに触れた人が多いと思うのでPythonを使った競プロについて書きたいと思います。
実際、自分はPythonで競プロをしています。競プロについては過去のブログなどを参考にしてみてください。
Pythonで競プロをするメリット・デメリット
実際に自分が半年間Pythonで競プロをしてみて思ったメリット・デメリットを独断と偏見で書き出したいと思います。
- メリット
- コードを短くシンプルに書ける
- 文法が直感的で読みやすい
- リストが使いやすい(二次元配列にするなどが容易)
- デメリット
- 実行速度が遅い
- 競プロの解説記事ではC++が多い
こんな感じですかね。実行時間が遅いのは競プロをすることにおいて相当不利です(いろいろ高速化がなされていますが...)。
しかし、初心者やプログラミングに慣れてない人にとってはメリットであげたコーディングのしやすさが大きいと思うのでPythonはおすすめです。
初めて競プロするときにつまずきやすいこと
一番つまずきやすいのはやはり入出力だと思います(僕もつまずきました)。問題を考える前につまずくのはつらいので入出力の仕方を紹介します。
入力について
整数の入力について紹介します。一つの入力ならこのようにできます。
13
a = int(input())
また、複数の数値を受け取りたいときはこのようにするとできます。
13 2
#別々に受け取りたいとき
a,b = map(int, input().split())
#リストで受け取りたいとき
l = list(map(int, input().split())
他にも様々な場合の入力があると思います。いろいろ調べてみるといいかもしれません。
出力について
基本は次のようにすれば良いです。
print(出力したいもの)
しかし、リストをこのように出力すると次のようになってしまいます。
a = [1, 2, 3]
print(a)
#出力結果 >>[1, 2, 3]
そこで、出力したいリストの前に"*"を加えると[ ]を省いて出力してくれます。
a = [1, 2, 3]
print(*a)
#出力結果 >>1 2 3
出力はその問題に合った出力をしましょう(WAになる可能性があります)
実際にやってみよう
たくさんのコンテストサイトがありますが今回はAtCoderを紹介します。問題文が日本語なのでとっつきやすいと思います。
特に初めて競プロをしてみるという人は、AtCoder Beginner Contest(以下 ABC)のA問題やB問題がおすすめです。他にもたくさん問題があるのでぜひ挑戦してみてください。
また、この記事が投稿された次の日の12/8にABC147が開催されるので参加してみてはいかがでしょうか。
最後に
いかがだったでしょうか。Pythonで競プロをすることはとてもおすすめです。問題が解けてACできるとすごく楽しいのでぜひやってみてください。
明日の記事担当はNABEさんです。お楽しみに!
東京工業大学の教養科目で開講されているPythonを用いてプログラミングの基礎を学修する科目です ↩︎