プログラマアクセス長


https://programmers.co.kr/learn/courses/30/lessons/49994
使用するデータ構造/アルゴリズム
dictionaryを使用して、パスがアクセス済みパスであるかどうかを確認します.
defaultdict(bool)を使用してデフォルト値をfalseとして保存し、移動するたびにパスにアクセスしたかどうかを確認し、応答を1増加させます.
コード#コード#
from collections import defaultdict

def solution(dirs):
    visited = defaultdict(bool)
    dx = {'L':0, 'R':0, 'U':1, 'D':-1}
    dy = {'L':-1, 'R':1, 'U':0, 'D':0}
    x, y, answer = 5, 5, 0
    for dir in dirs:
        nx, ny = x+dx[dir], y+dy[dir]
        if nx<0 or nx>10 or ny<0 or ny>10:
            continue
        if not visited[(x, y, nx, ny)] and not visited[(nx, ny, x, y)]:
            answer += 1
        visited[(x, y, nx, ny)] = True
        x, y = nx, ny
    return answer
コード改善方向
重複を解消するのに最も有効な資料構造はsetです.
これにより、コードをより簡単にすることができます.
改良されたコード
def solution(dirs):
    visited = set()
    dx = {'L':0, 'R':0, 'U':1, 'D':-1}
    dy = {'L':-1, 'R':1, 'U':0, 'D':0}
    x, y = 0, 0
    for dir in dirs:
        nx, ny = x+dx[dir], y+dy[dir]
        if nx<-5 or nx>5 or ny<-5 or ny>5:
            continue
        visited.add((x, y, nx, ny))
        visited.add((nx, ny, x, y))
        x, y = nx, ny
    return len(visited) // 2