implementation(simulation):上下左右


問題の定義
旅行家AはNです.× nサイズの正方形空間に立っています.このスペースは1です.× 1サイズの正方形に分割します.
最左上隅座標は(1,1),最右下隅座標は(N,N)である.
旅行家Aは上、下、左、右方向に移動することができ、開始座標は常に(1,1).
私たちの前に旅行家Aが移動を計画する計画書が置いてあります.
計画では、1文字のL、R、U、Dが1行に分かれています.
各文字の意味は次のとおりです.
L:左に1マス移動
R:1マス右に移動
U:1つ上へ移動
D:1マス下に移動
このとき旅行家AはN× Nサイズを超える正方形空間の動きは無視されます.
たとえば、(1、1)の位置でLまたはUに遭遇した場合は無視されます.
以下はN=5の地図と計画です.

入力条件
  • の第1行において、Nは空間の大きさを表す.(1<=N<=100)
  • 行は、旅行家Aが移動する計画書の内容を示している.(1<=移動回数<=100)
  • しゅつりょくじょうけん
  • の1行目では、選択したカードの数字がゲームルールに従って出力される.
  • I/O例
    #입력 
    5
    R R R U D D
    
    출력 
    3 4
    私が作ったコード
    n = int(input())
    plans = input().split()
    
    n = 5
    plans = ['R','R','R','U','D','D']
    
    curx, cury = 1, 1
    
    for plan in plans:
        if plan == "L" and curx > 0 and curx <= n:
            curx -= 1
        if plan == "R" and curx >= 0 and curx < n:
            curx += 1
        if plan == "U" and cury > 0 and cury <= n:
            cury -= 1
        if plan == "D" and cury >= 0 and cury < n:
            cury += 1
    print(curx, cury)
    コードの改良
    n = int(input())
    plans = input().split()
    
    n = 5
    plans = ['R','R','R','U','D','D']
    
    curx, cury = 1, 1
    
    # L, R, U, D (좌,우,상,하)에 따른 이동 방향*
    dx = [0, 0, -1, 1]
    dy = [-1, 1, 0, 0]
    move_types = ['L', 'R', 'U', 'D']
    
    for plan in plans:
    	for i in range(len(move_types)):
        	if plan == move_types[i]:
            	nx = curx + dx[i]
                ny = cury + dy[i]
        if nx < 1 or ny < 1 or nx > n or ny > n:
          	continue
      	curx, cury = nx, ny
        
    print(curx, cury)