ハードウェアエンジニアの守破離

国内電機メーカーに勤務しているハードウェアエンジニア

Atcorder_ABC198:初学者がAtcorder初参戦!

Pythonに触れて約4か月経過したので、初めてAtcorderのABC198に参加してみました。

結果は時間内にA, B, Cに回答。初学者にしては良い船出だったと思います。

成長記録としてこれから毎回ブログに残そうかな…(できるかな?)

灰色が当面の目標が茶色なので。えっ…今回の成績じゃ全然ダメなの?

と思いきや、初参加時のリセマラ防止の強い下方補正がかかったようです。

当分の間、以下の方針で勉強しようと思います。

【方針】

・コンテストに慣れるため、ABCには必ず参加する

・復習は必ず実施して、本番のハマったポイントは必ず明確化する

・継続が力になると信じて、毎日必ず1問演習する

 

以下が生々しい初学者の提出コードと回答例

A問題

n= int(input())
if n <= 1:
print(0)
else:
  print(N-1)

1で場合分けした意味よ…

# 模範回答例
N = int(input())
print(N-1)

B問題

n = input()
# print("文字数", len(n))
# print("N:",n)
# print("reverseN:",n[::-1])
if n == n[::-1]:
print("Yes")
else:
for i in range(len(n)):
if n[-1-i] == '0':
n = '0' + n
else:
break
# print(n)
if n == n[::-1]:
print("Yes")
else:
print("No")

 文字列[::-1]で逆になることが個人的なポイントでした。

#模範回答例
S=input()
for i in range(10):
T = "0"*i + S
if T==T[::-1]:
print("Yes")
exit()
print("No")

 

C問題

r, x, y = map(int, input().split())
l = (x**2 + y**2)**0.5
sho = l // r
amari = l % r
# print("距離",l)
# print("1歩で進む距離",r)
# print("直線歩数",sho)
# print("残り距離", l-sho*r)
# print("計算あまり",amari)
if amari == 0.0:
print(int(sho))
else:
if sho ==0:
print(2)
else:
# print(f"残りの距離は{l - r * int(sho-1)}です。")
print(int(sho)+1)

1歩で進む距離Rより目標座標が小さい場合の考慮を忘れて時間を無駄にしました。

ここをスムーズに気付けばDも解けたかも(?)

# 模範回答例
import math
R,X,Y=map(int,input().split())
D=math.sqrt(X*X+Y*Y)
if D==R:
print(1)
elif D<=R+R:
print(2)
else:
print(math.ceil(D/R))

 次回から込み入った計算を行う際にはmathライブラリを使用するか。

速度がどれだけ違うか検証してみようかな。

[Note]

math.ceil(): 小数点以下を切り上げ

math.floor(): 小数点以下切り捨て

 

f:id:Subarukun:20210413174417p:plain

 

f:id:Subarukun:20210411231950p:plain

毎回必ずABCには参加して早いとこ茶色になりたいところ。