문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public int solution(String dirs) {
int answer = 0;
// 이동한 경로들을 저장할 HashSet
HashSet<String> set = new HashSet<>();
// 명령어 변수
char direction = ' ';
// 현재 x좌표
int x = 0;
// 현재 y좌표
int y = 0;
// 이동할 x좌표
int movex = x;
// 이동할 y좌표
int movey = y;
// Set에 들어갈 좌표
String coordinates1 = "";
String coordinates2 = "";
for(int i = 0; i < dirs.length(); i++) {
// 명령 확인
direction = dirs.charAt(i);
// 명령어의 적힌 방향대로 이동
switch (direction) {
case 'U':
movey++;
break;
case 'D':
movey--;
break;
case 'L':
movex--;
break;
case 'R':
movex++;
break;
}
// 이동할 좌표가 좌표평면 내부에 있는지 확인
if(-5 <= movex && movex <= 5 && -5 <= movey && movey <= 5) {
// set에 들어갈 경로 입력
coordinates1 = x + "," + y + "=>" + movex + "," + movey;
coordinates2 = movex + "," + movey + "=>" + x + "," + y ;
// 해당 경로가 이미 지나친 경로가 아니라면
if(!set.contains(coordinates1) && !set.contains(coordinates2)) {
// 현재 경로를 Set에 저장
set.add(coordinates1);
set.add(coordinates2);
// 새로 지나간 경로이므로 answer++;
answer++;
}
// 이동할 좌표를 현재 좌표로 변경
x = movex;
y = movey;
}
// 이동할 좌표가 좌표평면 내부에 없다면 이동하지 않는다.
else {
movex = x;
movey = y;
}
}
return answer;
}
}
Java
복사