icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,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] 未経験からWebエンジニアを目指す方法とは

競技プログラミングに参加するときに習得しておきたい 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を使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。