반응형
같은 길이라면 왼쪽에서 오른쪽으로 이동하던 오른쪽에서 왼쪽으로 이동하던 중복으로 처리하기 때문에
hashset에 양방향을 기록해두도록 합니다.
import java.util.*;
class Solution {
public int solution(String dirs) {
HashSet<String> set = new HashSet<>();
int[] pos = new int[]{5, 5};
int count = 0;
for (int i = 0; i < dirs.length(); i++) {
switch (dirs.charAt(i)) {
case 'U':
if (pos[0] != 0) {
if (!set.contains(""+pos[0]+pos[1]+(pos[0]-1)+pos[1])) {
set.add(""+pos[0]+pos[1]+(pos[0]-1)+pos[1]);
set.add(""+(pos[0]-1)+pos[1]+pos[0]+pos[1]);
count++;
}
pos[0]--;
}
break;
case 'D':
if (pos[0] != 10) {
if (!set.contains(""+pos[0]+pos[1]+(pos[0]+1)+pos[1])) {
set.add(""+pos[0]+pos[1]+(pos[0]+1)+pos[1]);
set.add(""+(pos[0]+1)+pos[1]+pos[0]+pos[1]);
count++;
}
pos[0]++;
}
break;
case 'L':
if (pos[1] != 0) {
if (!set.contains(""+pos[0]+pos[1]+pos[0]+(pos[1]-1))) {
set.add(""+pos[0]+pos[1]+pos[0]+(pos[1]-1));
set.add(""+pos[0]+(pos[1]-1)+pos[0]+pos[1]);
count++;
}
pos[1]--;
}
break;
case 'R':
if (pos[1] != 10) {
if (!set.contains(""+pos[0]+pos[1]+pos[0]+(pos[1]+1))) {
set.add(""+pos[0]+pos[1]+pos[0]+(pos[1]+1));
set.add(""+pos[0]+(pos[1]+1)+pos[0]+pos[1]);
count++;
}
pos[1]++;
}
break;
}
}
return count;
}
}
반응형
'Algorithm' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 Level1 - 소수 만들기 [ Java ] (0) | 2021.04.20 |
---|---|
프로그래머스 코딩테스트 연습 Level1 - 예산 [ Java ] (0) | 2021.04.20 |
백준 11057번 오르막 수 [ Java ] (0) | 2021.04.15 |
백준 3046번 R2 [ Python ] (0) | 2021.04.08 |
백준 2475번 검증수 [ Python ] (0) | 2021.04.08 |