アクセスの長さ


中に入ると


これは,座標平面(5,5)上でゲームキャラクタの移動の長さを測定する問題である.ただし、(5,5)を超えてはいけません.同じ道を繰り返していくと、移動の長さに追加されません.

コードの説明


最初はベクトル2次元思考座標で解く.しかし、2番目の例題はいつも解けない.そこで調べてみると、2次元座標解ではなく、移動する道を4次元で表すことに気づきました.
まず地図で4次元配列を作ります.次のxとyに5を入れ、dirsの長さで繰り返し文を回転します.各条件文を書くときは、文字に合った内容を書けばいいです.+の場合、xまたはyは10未満(移動距離は10を超えてはいけません)-の場合、xまたはyは0を超えなければなりません(移動距離は0を下回ってはいけません).
歩く距離が訪問されていなければ(1でなければ)、両側に1番を描けばいいです.4次元なので両方に気をつけて.次に、文字に基づいてxまたはyに1を加えたり減らしたりすればよい.

コード#コード#

#include <string>
using namespace std;

int solution(string dirs) {
    int answer = 0;
    int map[11][11][11][11];
    int x = 5;
    int y = 5;
    
    for(int i=0; i<dirs.length(); i++){
        if(dirs[i] == 'U'){
            if(y < 10){
                if(map[x][y][x][y+1] != 1){
                    map[x][y][x][y+1] = 1;
                    map[x][y+1][x][y] = 1;
                    answer++;
                }
                y++;
            }
        }else if(dirs[i] == 'D'){
            if(y > 0 ){
                if(map[x][y][x][y-1] != 1){         
                    map[x][y][x][y-1] = 1;
                    map[x][y-1][x][y] = 1;
                    answer++;
                }
                y--;
            }
        }
        else if(dirs[i] == 'R'){
            if(x < 10){
                if(map[x][y][x+1][y] != 1){
                    map[x][y][x+1][y] = 1;
                    map[x+1][y][x][y] = 1;
                    answer++;
                }
                x++;
            }
        }else if(dirs[i] == 'L'){
            if(x > 0){
                if(map[x][y][x-1][y] != 1){
                    map[x][y][x-1][y] = 1;
                    map[x-1][y][x][y] = 1;
                    answer++;
                }
                x--;
            }
        }
    }
    return answer;
}

リファレンス


https://greenapple16.tistory.com/70