はじめに
最近はやたらと競プロ
やAtCorder
という言葉を聞く機会が増えた気がします。
私の大学の友達も「今日のビーモンダイ簡単だったね」や「今日のコンテストゼンタンサク使ったらティーエルイーだったわ」など耳馴染みのない第二言語のような言葉が飛び交うようになったので、これは私も始めないとと思い全く分からないながらも競プロデビューしました。
この記事ではそんな競プロ何それ美味しいのっていう状態から食べ物ではない(冗談です)今日はA問題の過去問解こう!となるまでの過程をまとめてみました。
そもそも競プロって何?
競技プログラミング(競プロ)は、プログラミング技術を競うコンピュータサイエンスの競技です。競プロでは、与えられた問題に対してアルゴリズムやデータ構造を使用して解答を作成し、その正確性と実行時間の効率性を競います。
競技プログラミングの目的は、与えられた問題を最も効率的に解決するアルゴリズムを見つけることです。参加者はプログラムを作成し、問題の入力に対して正しい出力を生成する必要があります。(GPT回答)
GPTも言っているようにシステム開発の実装などではなく、アルゴリズムを用いて回答するので実際のWebアプリ開発等の実装とは異なります。
おすすめ記事
勉強していくときにお世話になったQiita記事を共有しておきます
- 網羅的に競プロに必要な文法や書き方ついて学べるのでおすすめです
- 遅かれ早かれ、競プロをやっていると計算量というワードが飛び交います。個人的に計算量を理解するのに一番分かり易かったです
- 最低限の数学的知識を教えてくれる記事で数学苦手な私も助けられました。
解く中で学んだテクニックのメモ(雑記)
Pythonで競プロ行う中で自分が詰まった点や知らなかった点を雑多に書いているので誰かの役に立てば幸いです
下記に書いてある内容は私のgitHubに書いてあるTILからの抜粋です。自分用なので見づらかったらすみません...
入力系
s = input() //文字列
n = int(input()) // 数値
a,b = map(int,input().split()) //複数の数値
m = list(map(int,input().split())) // 数値のリスト
よく使う文法
リストの要素のインデックスの取得
Python のリスト(配列)の要素のインデックス、つまりその要素が何番目に格納されているかを取得する方法
リストの要素が重複していない場合、index()メソッド
を使う
テクニック系
数値の判定
数値であるか判定するにはisdigit関数
を用いることで判定出来る
数値なら=> True
それ以外なら => False
python でのスライス
注意点
最後のインデックスで指定した数から1引いた数
までスライスされる。
文字を繰り返す方法
文字は文字 * 数値
で繰り返すことができる
ans = "a" * 100
print(ans)
# aが100個出力される
数値からアルファベットの変換
Python の標準関数のchr関数
を使う。
chr 関数は、ASCII コードにしたがって、数字からアルファベットや記号に変換してくれる。
ビルドイン関数だからインポートしなくていい
ちなみにアルファベットから数値の変換はord関数
を用いる
問題
回答例
for i in range(26):
ans += chr(ord('a') + p[i] - 1)
#ordで最初の文字の数値を取得それに数値を足していって、文字列変換してる
終わりに
まだまだ私も勉強を始めたばかりですが、競プロを始めたいと思う方の少しでも参考になれば幸いです。