[프로그래머스] LV.2 방문 길이
문제링크: 프로그래머스 Lv.2 방문 길이
1. 아이디어
map을 돌아다니며 이동길이를 체크해야 함.
*처음에는 점에 대한 방문여부 등을 체크하려고 했으나, 이미 방문은 했던 위치이지만 새로운 곳에서 왔을 경우 정답카운트를 처리하기가 곤란했음.
*그래서 대안으로 map을 2배 사이즈로 키워서 실제 선에 대한 방문여부를 true, false로 체크하기로 생각함.
2. 자료구조
- map 2배 크기의 방문체크 배열이 필요.
boolean[ ][ ] visited
- 방향을 특정할 배열이 필요 :
int[ ][ ] dir
- 문자를 loop를 돌며 이동시킬 때 편리하게 비교하기 위한 캐릭터형태의 배열 필요 :
char[ ] cArr
- 현재 위치를 나타내는 배열 필요 :
int[ ] here
3. 구현
public static int solution(String dirs) {
int answer = 0;
int[][] dir = { {0, 2}, {0, -2}, {-2, 0}, {2, 0} };
boolean[][] visited = new boolean[22][22];
char[] cArr = dirs.toCharArray();
int[] here = {10, 10};
for (int i = 0; i < cArr.length; i++) {
char cur = cArr[i];
int[] move = new int[2];
if(cur == 'U') {
move = dir[0];
} else if(cur == 'D') {
move = dir[1];
} else if(cur == 'L') {
move = dir[2];
} else {
move = dir[3];
}
int x = here[0] + move[0];
int y = here[1] + move[1];
int lineX = here[0] + (move[0] / 2);
int lineY = here[1] + (move[1] / 2);
if(x >= 0 && x < 22 && y >= 0 && y < 22) {
if(!visited[lineX][lineY]) {
visited[lineX][lineY] = true;
answer++;
}
here[0] = x;
here[1] = y;
}
}
return answer;
}
4. 학습내용
- 이동길이를 알기 위해서는 이동한 선에
true
false
를 두는게 편할 수 있음!
마지막 수정일시: 2022-10-13 14:19
댓글남기기