[プログラマ/python]アクセス長
6586 ワード
🧑🏻💻 質問リンク
所与の方向に座標中の運動長を求める実現問題.この問題は白俊問題の機械掃除機問題に似ている.重複する線を区別するために,
set関数クリーンアップサイトを参考にすればいいです.
visited.add((x, y, nx, ny))
visited.add((nx, ny, x, y))
コードを見ると、例えば座標が(0,0)から(1,0)に移動するときと(1,0)から(0,0)に移動するときとが同じ線であることから、上記の手順が実現される.
問題を解く
所与の方向に座標中の運動長を求める実現問題.この問題は白俊問題の機械掃除機問題に似ている.重複する線を区別するために,
set()
関数を用いた.set()
関数を覚えていない場合がありますset関数クリーンアップサイトを参考にすればいいです.
visited.add((x, y, nx, ny))
visited.add((nx, ny, x, y))
コードを見ると、例えば座標が(0,0)から(1,0)に移動するときと(1,0)から(0,0)に移動するときとが同じ線であることから、上記の手順が実現される.
コード#コード#
def direction(d):
# 위쪽으로 한 칸
if d == "U":
return 0
# 아래쪽으로 한 칸
elif d == "D":
return 2
# 오른쪽으로 한 칸
elif d == "R":
return 1
# 왼쪽으로 한 칸
elif d == "L":
return 3
def solution(dirs):
answer = 0
# 위, 오른쪽, 아래, 왼쪽
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
visited = set()
x, y = 0, 0
for d in dirs:
i = direction(d)
nx, ny = x + dx[i], y + dy[i]
# 범위를 벗어날 경우 무시
if nx < -5 or nx > 5 or ny < -5 or ny > 5:
continue
# 하나의 선분을 이동할 때 양방향을 같이 확인
if (x, y, nx, ny) not in visited:
visited.add((x, y, nx, ny))
visited.add((nx, ny, x, y))
answer += 1
x, y = nx, ny
return answer
結果
Reference
この問題について([プログラマ/python]アクセス長), 我々は、より多くの情報をここで見つけました https://velog.io/@norighthere/프로그래머스-Python-방문-길이テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol