Pythonの競技プログラミングについて現役エンジニアが解説【初心者向け】

初心者向けにPythonの競技プログラミングについて現役エンジニアが解説しています。競技プログラミングでは、アルゴリズムや数学的な問題を解く課題が与えられ、いかに早く課題をクリアするかを競います。atcoderやtopcoderなどのサイトが有名です。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事が4,000以上あります。現役エンジニアの方はこちらをご覧ください。

Pythonの競技プログラミングについて解説します。

Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのPythonオンライン講座の内容をもとにしています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Pythonの競技プログラミングについて詳しく説明していくね!

大石ゆかり

お願いします!

 

競技プログラミングとは

Wikipediaによると競技プログラミングとは、「参加者全員に同一の課題が出題され、より早く与えられた要求を満足するプログラムを正確に記述すること」とあります。

競技プログラミング

特定の業務領域の問題解決や自社サービスの構築を目的とするのではなく、アルゴリズムや数学的な問題を解く課題が与えられ、いかに早く課題をクリアするかを競います。

課題のクリアが目的のため、場合によっては効率的だが分かりづらい、一般的では無いプログラミング手法も用いられることがあります。

時間や使用するコンピューターのスペックなどを制限し、参加者がなるべく同一の条件で競技できるようになっているのも特徴です。

競技プログラミングはインターネット上のサイトで定期的に開催されています。以下の他にもいくつも開催されているので調べてみると良いでしょう。

atcoder

topcoder

code jam

 

Pythonで競技プログラミングの問題を解いてみよう

Pythonで競技プログラミングを行うのであればatcoderがお勧めです。
この記事でもatcoderへの参加方法について解説します。

まずはSign Inページからユーザー登録を行いましょう。

atcoder Sign Up

ユーザー登録が終わったらチュートリアルでコンテストへの参加方法を確認します。

チュートリアル

次に練習用ページでソースコードを提出する練習を行います。

練習用ページ

内容を確認したら、いよいよ問題を解いてみます。
はじめは「Welcome to AtCoder」から取り組むと良いでしょう。

問題は問題文と制約、入力などの条件からなります。練習問題には各プログラミング言語の回答も掲載されています。

一通り練習問題に取り組んだら、コンテストへ参加してみましょう。

 

[PR] Pythonで挫折しない学習方法を動画で公開中

競技プログラミングに参加するときに習得しておきたい Pythonの知識

まずはPython言語の知識が無い場合には、基本的な文法について学習しましょう。

書籍を参考にするか、またはPythonチュートリアルがおすすめです。

Pythonチュートリアル

基本的な文法についてひととおり学習を行ったら、競技プログラミングでよく使うコーディングについて理解を深めましょう

 

入力

ユーザーからの入力を受け取るにはinput関数を使います。

入力された値は文字列なので数値に変換します。

整数に変換するにはint、浮動小数点に変換するにはfloatを使います。

以下はユーザーからの入力を浮動小数点に変換してnumという変数に格納するコードの例です。
 

num = float(input())

 
この他にも、CSVファイルからの入力なども良く行われます。あわせて確認しておきましょう。

 

出力

浮動小数点を特定の桁数で表示する場合、format関数を使います。

以下はnum変数を小数点第三位まで表示する例です。
 

num = 3.1415926536
print("{:.3f}".format(num))

 
実行結果は以下のようになります。
 

3.142

 

シーケンス(配列)

Pythonの強みでもあり、多用されるのがシーケンスによるデータ処理です。

リストからの要素の取り出し(スライス)方法は良く使うので覚えておきましょう。
 

arr = list(range(0, 10))
print(arr[:5])
print(arr[::2])

 
実行結果は以下のようになります。
 

[0, 1, 2, 3, 4]
[0, 2, 4, 6, 8]

 
リスト内包表記もよく使う手法です。複雑な処理を端的に記述することができます。

以下はFizzBuzz問題の解法をリスト内包表記を使って1行で記述した例です。
 

arr =["FizzBuzz" if i % 15 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else i for i in range(1, 101)]
print(arr)

 

実行結果は以下のようになります(途中を省略しています)。
 

[1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, ..<略>.. 'Fizz', 97, 98, 'Fizz', 'Buzz']

 

監修してくれたメンター

太田和樹(おおたかずき)

ITベンチャー企業のPM兼エンジニア

普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。

開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント。

地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。

初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。