[programmers]アクセス長
問題の説明
4つのコマンドでゲームキャラクターを移動したいです.コマンドは次のとおりです.
たとえば、コマンドが「ULURRDLLU」の場合
ただし、座標平面の境界を超えたコマンドは無視されます.
たとえば、コマンドがLULLLUの場合
コマンドにパラメータdirsが付与されると、ゲームキャラクタが初めて歩く道の長さを求め、returnのsolution関数を完了する.
せいげんじょうけん
ソースコード
class Solution {
int[] dx = {0, 0, 1, -1}; // U, D, R, L
int[] dy = {1, -1, 0, 0};
public int solution(String dirs) {
int answer = 0;
boolean[][][][] visited = new boolean[11][11][11][11];
// 배열 인덱스에 음수를 넣을 수 없으므로 -5~5를 0~10으로 변환
int x = 5, y = 5; // (0,0) -> (5,5)
char[] ch = dirs.toCharArray();
for(Character c : ch) {
int nx = x, ny = y; // 움직일 좌표
if(c == 'U') {
nx += dx[0];
ny += dy[0];
}
else if(c == 'D') {
nx += dx[1];
ny += dy[1];
}
else if(c == 'R') {
nx += dx[2];
ny += dy[2];
}
else if(c == 'L') {
nx += dx[3];
ny += dy[3];
}
// 좌표평면을 벗어나는지 Check
if(nx > 10 || nx < 0 || ny > 10 || ny < 0) {
continue;
}
// UDU는 1이 됨을 고려해야함!!
// 그러므로 어디서 출발했는지도 체크해야 함
if(!visited[nx][ny][x][y] && !visited[x][y][nx][ny]) {
visited[nx][ny][x][y] = true;
visited[x][y][nx][ny] = true;
answer += 1;
}
x = nx;
y = ny;
}
return answer;
}
}
Review
配列インデックスは負数ではないことを考慮する必要があります.
だから私は-5から5の座標の代わりに0から10を使います.
UDUの場合も考えるべきです.
この場合、歩いた経路は歩いた経路と同じなので、歩いた経路の長さは1!
どこから出発するのかチェックするために、見学の列を4次元にしました.
-終了-
Reference
この問題について([programmers]アクセス長), 我々は、より多くの情報をここで見つけました https://velog.io/@minwest/Programmers-방문-길이テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol