https://school.programmers.co.kr/learn/courses/30/lessons/49994
(nr, nc)를 계산U와 D)는 2 - d 2- 0 = 2, 2 - 2 = 0L과 R)은 4 - d 4 - 1 = 3, 4 - 3 = 1answer 값을 증가시키고, 방문 기록을 남김class Solution {
static int dr[] = {-1, 0, 1, 0}; // 행(row) 이동 방향
static int dc[] = {0, -1, 0, 1}; // 열(column) 이동 방향
public int solution(String dirs) {
int answer = 0;
int map[][] = new int[11][11];
boolean visit[][][] = new boolean[11][11][4]; // 방문 여부 [행][열][방향]
// 시작 좌표 (5, 5)
int r = 5;
int c = 5;
for (int i = 0; i < dirs.length(); i++) {
// 처리할 명령어를 하나씩 가져옴
char cc = dirs.charAt(i);
int d = 0; // 이동 방향을 저장할 변수
if (cc == 'U') // 위
d = 0;
if (cc == 'L') // 왼쪽
d = 1;
if (cc == 'D') // 아래
d = 2;
if (cc == 'R') // 오른쪽
d = 3;
// 새로운 좌표
int nr = r + dr[d];
int nc = c + dc[d];
// 범위 밖으로 나가면
if (nr < 0 || nc < 0 || nr >= 11 || nc >= 11)
continue;
// 방문하지 않았다면
if (!visit[nr][nc][d]) {
// 방문처리
visit[nr][nc][d] = true;
// 반대 방향에도 방문처리
// 짝수라면 -> 위 아래, 홀수라면 -> 왼 오
d = (d % 2 == 0) ? 2 - d : 4 - d;
visit[r][c][d] = true;
// 새로운 경로, answer 증가
answer++;
}
// 좌표 갱신
r = nr;
c = nc;
}
return answer;
}
}