programmers_방문 길이_java
2023. 4. 11. 14:00ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/49994
import java.util.*;
class Solution {
private static int[][] delta = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // U R D L
public int solution(String dirs) {
int answer = 0;
Map<String, Integer> visited = new HashMap<>();
int dirsLength = dirs.length();
// 이동
int y = 0;
int x = 0;
for(int i = 0; i<dirsLength; i++){
int dir = direction(dirs.charAt(i));
int nexty = y + delta[dir][0];
int nextx = x + delta[dir][1];
if(isValidPosition(nexty, nextx)){ // 좌표 평면 범위 내 확인
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
//y+x+dir 로 키값 설정
sb1.append(y).append(x).append(dir);
sb2.append(nexty).append(nextx).append((dir+2)%4);
if(!visited.containsKey(sb1.toString()) && !visited.containsKey(sb2.toString())){ // 방문한 적이 없는 경우
answer++;
}
// 2가지 경우가 같은 길 의미하므로 추가
visited.put(sb1.toString(), 1);
visited.put(sb2.toString(), 1);
y = nexty;
x = nextx;
}
}
return answer;
}
public int direction(char dir){
// 반대 방향 계산시 용이하도록 U R D L 순으로 설정 (+2 시 반대 방향)
switch(dir){
case 'U' :
return 0;
case 'R' :
return 1;
case 'D' :
return 2;
case 'L' :
return 3;
}
return 0;
}
// 좌표평면 경계 유효성 판단
public boolean isValidPosition(int y, int x){
if(-5<= y && y<=5 && -5<= x && x<=5){
return true;
}
return false;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_[3차] 파일명 정렬_java (0) | 2023.04.11 |
---|---|
programmers_모음 사전_java (0) | 2023.04.11 |
programmers_스킬트리_java (1) | 2023.04.10 |
programmers_땅따먹기_java (0) | 2023.04.10 |
programmers_주차 요금 계산_java (0) | 2023.04.10 |