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