[問題解決]プログラマ-アクセス長[レベル2]
10951 ワード
問題の説明は省略します。リンクをクリックしてください。
提问链接
I/O例
boardanswer"ULURRDLLU"7"LULLLLLLU"7
に答える
初めて歩く長さだけが必要です.このグラフは双方向に歩くことができるので、同じ道を往復するときは(双方向)チェックします.
アクセスポイントをチェックする方法はsetを使用して重複アクセスを排除することです.
1本の線に2つの点が必要なように、道を渡るには2つの点(出発点、到着点)を通ります.
このとき、
(출발한 지점, 도착할 지점) ,(도착할 지점, 출발한 지점)
がリストに追加され、set을 이용해 중복된 방문을 제거
が追加される.回
리스트의 길이를 2로 나누어
.コード#コード#
マイコード
def solution(dirs):
dx = [0, -1, 0, 1]
dy = [-1, 0, 1, 0]
dir = ['L', 'U', 'R', 'D']
x, y = 0,0
answer = []
for d in dirs:
for i in range(len(dir)):
if d == dir[i]:
nx = x + dx[i]
ny = y + dy[i]
if nx < -5 or nx > 5 or ny < -5 or ny > 5:
nx -= dx[i]
ny -= dy[i]
else:
answer.append((x, y, nx, ny))
answer.append((nx, ny, x, y))
x = nx
y = ny
answer = set(answer)
return len(answer)//2
ディックのコードを使う
def solution(dirs):
answer = 0
dx , dy = [-1, 0, 1, 0], [0, -1, 0, 1]
dic = {'U': 0, "L":1, "D": 2, "R":3}
visited = set()
x, y = 0, 0
for dir in dirs:
d= dic[dir]
nx, ny = x+ dx[d], y+dy[d]
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
この問題について([問題解決]プログラマ-アクセス長[レベル2]), 我々は、より多くの情報をここで見つけました https://velog.io/@redcarrot01/ProblemSolving-프로그래머스-방문길이Level2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol