1. 문제 풀이 아이디어
- 이동 경로를
String으로 만들어Set에 저장하고, 이동할 때마다 확인하면 문제를 해결할 수 있다.
2. 나의 정답 코드
class Solution {
public int solution(String dirs) {
int answer = 0;
char[] chars = dirs.toCharArray();
int[] prev = {0, 0};
Set<String> set = new HashSet<>();
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder2 = new StringBuilder();
for (char c : chars) {
int[] cur = prev.clone();
switch (c) {
case 'U':
cur[1] += 1;
break;
case 'D':
cur[1] -= 1;
break;
case 'L':
cur[0] -= 1;
break;
case 'R':
cur[0] += 1;
break;
}
if (cur[0] < -5 || cur[0] > 5 || cur[1] < -5 || cur[1] > 5) {
continue;
}
stringBuilder.append(prev[0]).append(prev[1]).append(cur[0]).append(cur[1]);
stringBuilder2.append(cur[0]).append(cur[1]).append(prev[0]).append(prev[1]);
if (!set.contains(stringBuilder.toString())) {
set.add(stringBuilder.toString());
set.add(stringBuilder2.toString());
answer++;
}
stringBuilder.setLength(0);
stringBuilder2.setLength(0);
prev = cur;
}
return answer;
}
}3. 정리
prev배열에{0, 0}을 저장하고, 이동할 때마다 이전 위치를 저장한다.
cur배열에 이전 위치 값을 저장하고,switch문을 사용하여 입력 값에 따라 값을 변경한다.
StringBuilder를 2개 사용하여 이동 경로를 문자열로 만든다.
set에 중복된 이동 경로가 없다면answer값을 증가시키고,set에 이동 경로를 저장한다.
Share article