#デビュー戦 〜AtCorder Beginner Contest 160〜
データサイエンティストとして勤務してちょうど1年が経ち、自分のコーディングの実力を客観的に知りたいと思いAtCorderに挑戦してみました。
と言っても普段業務で使っているSASでは参加できないので、ひまひまに触っていたPythonの文法をさらっと復習しAtCorderの使い方を覚えvscodeでテストできる環境を整えいざ出陣!!
とりあえず3完ぐらいできればいいかなくらいのノリで!
実際の問題は以下のリンク参照
https://atcoder.jp/contests/abc160/tasks
##A - Coffee
与えられた長さ6の英小文字がcoffeeに似ているかを判定する問題。
競プロ経験者からすると瞬殺する問題らしいのだが文字列を1文字づつ取りだすという基礎中の基礎もおろそかだったのでこの問題で9分消化(泣)
N = input()
if N[2] == N[3] and N[4] == N[5]:
print("Yes")
else:
print("No")
##B - Golden Coins
両替を扱ったAtCorderの序盤では定番の問題。
数値変数の入出力と四則演算をコードに落とせれば特に問題なし。
と言いつつもこの問題でも10分消化。我ながら変数名のセンス無さすぎる(笑)
N = int(input())
ppp = N // 500
NN = N-500*ppp
pp = NN //5
ans = 1000*ppp+5*pp
print(ans)
##C - Traveling Salesman around Lake
ここからが自分的には山場のC問題
AB問題では設問内容をそのままコードに落とし込めば良かったのだが、
C問題からはそういう訳にはいかないのでちょっと厄介。
今回は池の周りに立っている全ての家を訪問する為の最短経路を求める問題
処理自体はすぐに思いついたのだが実装できるかは別問題(泣)
提出した間違っているコード⬇︎
K, N = map(int, input().split())
arr = list(map(int, input().split()))
for i in range(N-2):
sa =int(arr[i+1]-arr[i])
ssa =int(arr[i+2]-arr[i+1])
max_num = max(sa,ssa)
hasi = K-arr[N-1]+arr[0]
ans =K-(max(max_num,hasi))
print(ans)
List.appendの処理をループする方法(超基礎)を思いついたので
なんとか制限時間内に完成できた!!(この時点で80分経過)
エラーが出た訳ではないのでデバッグにかなり時間がかかってしまった。
ちなみにこの問題はC問題にしてはかなり簡単な方らしい
⬇︎通ったコード
K, N = map(int, input().split())
arr = list(map(int, input().split()))
List=[]
for i in range(N-1):
sa =int(arr[i+1]-arr[i])
List.append(sa)
max_num = max(List)
hasi = K-arr[N-1]+arr[0]
PPP = (max(max_num,hasi))
ans = K-PPP
print(ans)
##D - Line++
なんかグラフとか最短経路とか出てくる問題だった。
到底残り15分で解ける問題じゃないのでここでギブアップ
ちなみにweb系エンジニアの友達は解けたらしい
##結果
9767人中7167位とまあデビュー戦にしては健闘したのでは(笑)
ただ思ったよりレーティングが上がらない。
コロナで時間あるし暫く本腰入れてやってみよう!!