[イコール]体現-上下左右


質問する


旅行家AはN×Nサイズの正方形空間に立っている.この空間は1×1の大きさの正方形に分かれている.最左上隅座標は(1,1),最右下隅座標は(N,N)である.旅行家Aは上、下、左、右方向に移動することができ、開始座標は常に(1,1).私たちの前に旅行家Aが移動を計画する計画書が置いてあります.

計画書には1行のスペースを基準に、L、R、U、Dの1文字が繰り返し書かれています.各字の意味は以下の通りです.
  • L:左シフト
  • R:右に1マス
  • 移動
  • U:上へ移動する
  • D:1つ下に移動
  • このとき,旅行者AがNX Nサイズの正方形空間から離れる移動は無視される.例えば、(1,1)の位置でLまたはUに遭遇した場合、無視される.次はN=5の地図と計画書です.
    この場合、6つのコマンドに従って、旅行者が移動する位置は、(1,2)、(1,3)、(1,4)、(2,4)、(3,4)の順であるため、最終的に旅行者Aが到着する場所の座標は(3,4)である.つまり、3行4列目の位置に相当するので(3,4)と書きます.計画書を作成する場合は、旅行者Aが最終的に到着した場所の座標を出力するプログラムを作成してください.
    入力条件
  • の第1行は、空間サイズを表すNを与える.(1 <= N <= 100)
  • 行は旅行家Aが移動する計画書の内容を示した.(1<=移動回数<=100)
  • しゅつりょくじょうけん
  • の最初の行では、旅行者Aが最終的に到着した場所の座標(X,Y)をスペースで区切って出力します.
  • 入力例
    5
    R R R U D D
    出力例
    3 4

    私の答え


    この問題はできなかった...🪓💩🪓 2 Dリストで座標を入れたかったのですが実現せず、与えられた草が時間を超えていました.解きほぐすまで掴みたかったのですが、アイデアを思いついて実行に移し、30分を超えると諦め、解きほぐす感覚を見ながら勉強したほうがいいので、おとなしくやめましょう!(適当に諦めることを覚えた…)答えの例を一つ一つ復習します.

    回答例

    # N을 입력받기
    n = int(input())
    x, y = 1, 1
    plans = input().split()
    
    # 이동된 좌표 저장
    nx = 0
    ny = 0
    
    # 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 = x + dx[i]
                ny = y + dy[i]
            # 공간을 벗어나는 경우 무시
            if nx < 1 or ny < 1 or nx > n or ny > n:
                continue
            # 이동 수행
            x, y = nx, ny
    
    print(x, y)