[問題解決]プログラマ-アクセス長[レベル2]


問題の説明は省略します。リンクをクリックしてください。


提问链接


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