[初心者向け][python]競技プログラミングの全て
はじめに
競技プログラミング(以下競プロ)は出題者から出された課題に対してプログラミングを書き、答えを導かせると言う競技です。
競プロで問題を多く解いていくと数学力やプログラミングの実装力が上がります。
競プロの主なサイトについて
競プロには色々なサイトがあり、毎日のように大会が開催されています。
以下では初心者向けの競プロサイトについてそれぞれまとめています。
・AtCoder 基本的に毎週土曜日に大会が行われている日本最大の競プロサイト
・yukicoder 競プロの模試、練習台などとして位置付けられる日本語のサイト
・CodeForces 海外の競プロサイト、時差の影響で夜中から大会が開始される
競プロのルールについて
競プロはサイトによってルールが全く違います。
順位の付け方からネット検索がありか、仲間と協力するのがありかどうかなど色々なルールがあるのでしっかりと読んでから始めましょう。
ここでは基本的なAtCoderの開催するBeginnerContestについて解説していきます。
・AtCoderの基本ルール(AtCoderのルール(URL))
1.この大会での協力は禁止
2.多くの問題数を解いた方が勝ち、同点の場合は時間が早い方が勝ち
3.言語はフリーです(ここではPythonについて解説します。)
4.コンテスト中はSNSにて第三者が確認できないことを投稿するのは禁止
5.インターネットでの検索はOK!
・正解不正解の表記の仕方
AC…正解
WA…不正解(回答が間違っている)
CE…エラー(プログラミングの表記が間違っている)
TLE…実行時間外エラー(処理が多すぎてエラー)
・AtCoderのレートについて
AtCoderにはレーティングの機能があります。コンテスト参加時にレートに反映させるかどうかを選ぶことができ、反映させるとコンテスト終了数時間後に自分のレートが更新されます。レートが上がっていくとレートの色がついていきますのでもっと高いレートを目指して頑張りましょう!
競プロの勉強について
競プロの勉強といえば主に2つあります。
1つ目は過去に出た問題を解いて解説を見て勉強する方法。
2つ目はよく出て知っているととても役に立つアルゴリズムを勉強して学ぶ。
私がお勧めする方法は
①まず言語について軽く勉強します。
②その後、過去問を少し解いてみます。わからなかったら解説を見てもOK!
③自分で簡単な問題が解けるようになったなと思ったら近くの大会に出場してみます。
④そこで実際の大会を味わってさらにやる気が出たところでアルゴリズムの勉強やもっと難しい過去問を解きます。
今回ここで解説するのは①、②の部分です。④からのアルゴリズムの勉強ができるサイトも載せてあるのでぜひ見てください。
アルゴ式(アルゴリズムの勉強サイト)
Pythonについて
基本の型について
・str型…文字列の型
・int型…数字(整数)の型
・float型…小数点を含む数字の型
・bool型…正か負かを表す型
・list型…複数の要素を含むもの(変更可能)
・tuple型…複数の要素を含むもの(変更不能)
・dictionary型…複数の要素を含み、キー値で管理できる
変数について
基本的な変数の指定の仕方です
a = "Python" #str型
b = 123 #int型
C = 12.34 #float型
d = True #bool型
e = [12,47,"abcd"] #list型
f = (12,"abcd",345) #tuple型
g = {'Key1':'Val1','Key2':'Val2'} #dictionary型
出力文について
出力分は基本的にprint()で表記します。例は下の通りです。
print("文字列") #文字列が出力される
print(数字) #数字が出力される
print(変数名) #変数の中身が出力される
if文について
基本的なif文の作り方です。
#書き方
if 条件式 :
実行文
#例文(もし変数xが1より大きいならば 1 < x を出力しろ)
if 1 < x :
print("1 < x")
#例文2(もし変数xが1以上かつ10以下ならばTrueを出力しろ)
if 1 <= x and 10 >= x :
print("True")
条件式に当てはまるものは
① <= >= (以上、以下)
② < > (より小さい、より大きい)
③ == != (等しい、等しくない)
条件式の間にand,orをつけることによって論理積、論理和を表すことができる。
for文について
基本的なfor文の書き方です。
#書き方①
for i in リスト等の名前 :
print(i)
#書き方②
for j in range (iの初めの数,iの終わりの数+1):
print(j)
#例① (出力は1から5が改行区切りで)
a = [1,2,3,4,5]
for i in a:
print(i)
#例② (出力は1から5が改行区切りで)
for j in range (1,6):
print(j)
入力を受け取る文について
競プロでは色々な形で入力を受け取ることがあるので基本的なものを何個か載せておきます。コメントアウト後の()にはこう言う時に使うと言う例と書いています。
a = int(input()) #数字一個の入力(123)
b = input() #文字列一個の入力(python)
c,d = map(int,input().split()) #数字2個の入力(123 456)
e = list(map(int,input().split())) #複数個の数字をリストに格納(123 456 789 012)
さいごに
ここに載せているPythonの構文は知っていて当たり前のものですが大切です。
忘れないようにしていきましょう。ここからは過去問を軽く解けると思います。
AtCoderの情報サイトに載っている過去問のレベルが低いものから解いていきましょう!
わからない時は調べれば大体出てきます。調べ方は例えば『リストに要素追加 Python』などです。
調べ方がわからなかったり、調べてもわからない場合は私のTwitterにDMしていただければなるべく早く返答をしたいと思います。
それでは頑張ってください!
この記事が気に入ったらサポートをしてみませんか?