期間は6ヶ月(25週間)とし、水色コーダーを目指します。
C・D問題攻略のためアルゴリズム別学習を進めます。
今週学習したこと
・特になし
安全情報確保支援士の学習をしており、競プロの学習はできませんでした。
@e869120さんの記事の分野別学習記録
レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】
基本アルゴリズム12個を学ぶと良いようです。
各記事ボリュームがありますが、まずは12個基本を押さえます。
全探索 | 二分探索 | 深さ優先探索 (DFS) | 幅優先探索 (BFS) |
動的計画法 (DP) | ダイクストラ法 | ワーシャルフロイド法 | クラスカル法 |
高速な素数判定法 | べき乗を高速に計算する手法 | 逆元を計算する手法 | 累積和 |
筆者の学習歴
学習歴はこんな感じです。
・利用言語はPython3
・Pythonの利用は業務で少し
・学習は「みんなのPython」を読んだくらい
・ABCコンテストには数回参加した(解けるのは1〜2問)
競プロではC++を使う方が多いかと思いますが、筆者はPythonのシンプルさに感動したためPythonで取り組みます。
今日が2022年9月4日(日)で、9月20日までの半年の期間で学習を進めます。
毎週のAtCoder Beginner Contest(ABC)をペースメーカーにしていきます。
今週のコンテスト
ABC267
ABCに参加してきました。
2問AC、灰色パフォーマンスでした。
A、B問題しか解けませんでした。
AC:1問
パフォーマンス:279
レーティング:408→393(-15)
段級位:9級
早速灰色に降級しました。
また上げていくしかないですね。
結果
Saturday
次の土曜日までの日数を出力せよ。
3分10秒でACしました。
S=input()
d={'Monday':5, 'Tuesday':4, 'Wednesday':3, 'Thursday':2, 'Friday':1 }
print(d[S])
Split
ボウリングピンの状態が与えられる。
スプリットかどうかを判定せよ。
78分(トータル81分)でACしました。
ボウリングのピンの状態を7列で表すところまではすぐ思いつきました。
7列の状態(両端残りなら1000001)からスプリットかの判定に手こずりましたが、以下の文字列があるか検索すればよかったです。
[101,1001,10001,100001,1000001]ここで80分くらい使ってしまったのが痛すぎました。
import itertools
S=list(input())
sp=False
b=[0]*7
if S[0]=='1':
print('No')
exit()
if S[6]=='1':
b[0]=1
if S[3]=='1':
b[1]=1
if S[1]=='1' or S[7]=='1':
b[2]=1
if S[0]=='1' or S[4]=='1':
b[3]=1
if S[2]=='1' or S[8]=='1':
b[4]=1
if S[5]=='1':
b[5]=1
if S[9]=='1':
b[6]=1
#print([k for k, g in itertools.groupby(b)])
if([k for k, g in itertools.groupby(b)])==[0,1,0]:
print('No')
elif([k for k, g in itertools.groupby(b)])==[1,0,1]:
print('Yes')
elif len([k for k, g in itertools.groupby(b)])==1:
print('No')
elif len([k for k, g in itertools.groupby(b)])==2:
print('No')
else:
print('Yes')
Index A(Continuos Ver)
長さNの整数列Aが与えられる。
長さMの連続部分列Bについて の最大値を求めよ。
20分ほど考えましたが解答を提出できませんでした。
素直に(N-M)×Mのループを組むとT LEしてしまいます。残り時間はこの問題に取り組みました。
コンテスト後に、(i番~i+M番目までの計算値)を関数化しておけば解けることに気づきました。
あと15分くらいあれば解けそうでしたので、悔しいです。
次の目標
目標:緑色パフォーマンスを出せるようにする
緑色昇級のため、目標を整理しました。
・A・B問題を高速で解く(理想5〜10分以内)
・C・D問題をどちらかあるいは両方解く
安定して茶色パフォーマンスを出し、できれば緑色パフォーマンスを目指します。