[python]プログラマ(Lv 2)-アクセス長


こんにちは:
https://programmers.co.kr/learn/courses/30/lessons/49994

に答える


この問題は、座標と移動する座標のセットにアクセスしたかどうかを確認することによって解決されます.
初期座標は(5,5)です.
問題の例が1番のコマンド(L)の場合、(5,4)と(5,5)の間にアクセスします.
順番は関係ないので両方チェックすればいいです
(5, 4) (5, 5)
(5, 5) (5, 4)
d = {
    'U': [-1, 0],
    'D': [1, 0],
    'R': [0, 1],
    'L': [0, -1]
}

def solution(dirs):
    check = set()   
    pos = [5, 5]
    ans = 0
    
    for dir in dirs:
        x, y = pos
        dx, dy = d[dir]
        new_x , new_y = x + dx, y + dy
        key_1 = f'{x}{y}{new_x}{new_y}'
        key_2 = f'{new_x}{new_y}{x}{y}'
        if 0 <= new_x <= 10 and 0 <= new_y <= 10:
            pos = [new_x, new_y]
            if key_1 not in check:
                ans += 1
                check.add(key_1)
                check.add(key_2)
                
    return ans