https://programmers.co.kr/learn/courses/30/lessons/49994
구현 실수만 하지 않는다면 쉽게 풀리지 않을까 싶다.
나는 지나간 길을 visited 배열에 마킹하는 방식으로 풀었는데 HashSet으로 풀어도 될 듯 하다.
좌표평면의 한 칸이 아니라 모서리를 저장해야 하므로
이런 식으로 윗면과 옆면을 따로 저장하기 위해 3차원 배열로 선언했다.
class Solution {
public int solution(String dirs) {
int answer = 0;
// 순서대로 UDLR
// visited에 기록하기 위한 배열
int[] x1 = {-1, 0, 0, 0};
int[] y1 = {0, 0, -1, 0};
// 현재 위치 변경하기 위한 배열
int[] x2 = {-1, 1, 0, 0};
int[] y2 = {0, 0, -1, 1};
boolean[][][] visited = new boolean[2][11][11];
// 현재 위치를 저장
int x = 5;
int y = 5;
for (char a : dirs.toCharArray()) {
int dir = 0;
switch(a) {
case 'U': dir = 0; break;
case 'D': dir = 1; break;
case 'L': dir = 2; break;
case 'R': dir = 3; break;
}
int newX = x + x2[dir];
int newY = y + y2[dir];
if (newX < 0 || newX >= 11 || newY < 0 || newY >= 11) continue;
if (dir <= 1) {
if (!visited[1][x + x1[dir]][y + y1[dir]]) {
answer++;
visited[1][x + x1[dir]][y + y1[dir]] = true;
}
}
else {
if (!visited[0][x + x1[dir]][y + y1[dir]]) {
answer++;
visited[0][x + x1[dir]][y + y1[dir]] = true;
}
}
x = newX;
y = newY;
}
return answer;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[2020 카카오 인턴십] 키패드 누르기 (0) | 2020.09.01 |
---|---|
[프로그래머스] 기지국 설치 (0) | 2020.05.22 |
[프로그래머스] 배달 - Java (0) | 2020.05.21 |
[프로그래머스] 영어 끝말잇기 - Java (0) | 2020.05.19 |
[프로그래머스] 점프와 순간 이동 - Java (0) | 2020.05.19 |