▼問題文のURL
▼考え方
現在の座標(x,y)と現在の向きをリストlで管理します。入力(=移動の向きL,R)と現在の向きに基づき、次の座標と次の向きを計算し出力します。向きは、0:北,1:東,2:南,3:西とします。
▼コード
X,Y,N = map(int,input().split())
# l: 現在の座標(x,y)と向きを表すリスト
l = [X,Y,0]
for _ in range(N):
# d: 入力
d = input()
if d == "L":
if l[2] == 0:
# 次の座標の計算
l[0] -= 1
elif l[2] == 1:
l[1] -= 1
elif l[2] == 2:
l[0] += 1
elif l[2] == 3:
l[1] += 1
# 次の向きの計算
l[2] -= 1
else:
if l[2] == 0:
l[0] += 1
elif l[2] == 1:
l[1] += 1
elif l[2] == 2:
l[0] -= 1
elif l[2] == 3:
l[1] -= 1
l[2] += 1
print(l[0],l[1])
if l[2] < 0:
l[2] = 3
elif l[2] > 3:
l[2] = 0
▼感じたこと
私はコードを書く際に、いろいろなやり方が思いつけるようになりたいです。そもそも教科書的な良いやり方とは何なのかをまず身に着け、そのうえで、解答コード例の方針の内容や、その他の良いやり方に触れるべきだなと思いました。
求められることや制約条件が何なのか、ということが大事なのかなと思います。それらをまず踏まえて、最適なやり方がいろいろと思いつくようになりたいです。
参考までに、解答コードに比べて、私のコードは行数が11行多く(空行除く)、変数は1つ少なく、リストは同数でした。