[プログラマレベル2]アクセス長


📃 問題の説明
アクセスの長さ
4つのコマンドでゲームキャラクターを移動したいです.コマンドは次のとおりです.
U:1マス上へ移動
D:1つ下に移動
R:1マス右に移動
L:左に1マス移動
キャラクタは、座標平面(0,0)の位置から開始します.座標平面の境界は、左上角(-5、5)、左下角(-5、-5)、右上角(5、5)および右下角(5、-5)からなる.(그림 설명 생략)このとき,ゲームキャラクタが歩いた道の中でキャラクタが初めて歩いた道の長さを要求する.たとえば、上記の例では、ゲームキャラクタが移動する長さは9ですが、キャラクタが最初に歩く長さは7です.(8、9番命令で移動した道はすでに2、3番命令で通っています)
ただし、座標平面の境界を超えたコマンドは無視されます.
コマンドにパラメータdirsが付与されると、ゲームキャラクタが初めて歩く道の長さを求め、returnのsolution関数を完了する.
せいげんじょうけん
  • dirsは、「U」、「D」、「R」および「L」を除いて文字列形式で与えられる.
  • dirsの長さは500以下の自然数である.
  • [質問元:プログラマー]
    👨‍💻 解決策
    私の考えは次から次へと広がってきた.
    最初の座標は0,0から
    U,D,L,Rによって座標に多少加算され、ディクシャナリーで宣言されます.
    △あとで考えてみましたが、トフを利用すればもっと簡単だと思います.
    所定のdirsに移動する座標を保存し、
    境界を越えた部分に例外処理を与える.
    移動した座標を保存します.
    (現在x,現在y,移動x,移動y)フォーマットはアクセスリストに格納される.
    でも初めて歩いた道だけカウントダウンするので、
    (移動x、移動y、現在x、現在y)の値は、アクセスリストに一緒に保存されます.
    アクセスリストにない新しい値が受信されるたびに、カウントが返されます.
    n/a.結論
    ゲームキャラクターが歩いた道の中で、初めて歩いた道を数えるために、
    アクセスリスト(현재x, 현재y, 이동x, 이동y) (이동x, 이동y, 현재x, 현재y)を一緒に保存し、
    救う
    👨‍💻 ソースコード
    def solution(dirs):
        answer = 0
        x, y = 0, 0
        moveDir = {'U': 1, 'D': -1, 'L': -1, 'R': 1}
        visit = []
    
        for dir in dirs:
            moveX, moveY = x, y
            temp, temp2 = [], []
    
            if dir in ['U', 'D']:
                moveY += moveDir[dir]
            elif dir in ['L', 'R']:
                moveX += moveDir[dir]
    
            if not (-5 <= moveX <= 5) or not (-5 <= moveY <= 5):
                continue
    
            temp += x, y, moveX, moveY
            temp2 += moveX, moveY, x, y
            if temp not in visit:
                visit.append(temp)
                visit.append(temp2)
                answer += 1
            x, y = moveX, moveY
    
        return answer