Algorithm/java

[Java][프로그래머스] 방문 길이

현이승 2023. 5. 8. 16:00
import java.util.*;

class Solution {
    public int solution(String dirs) {
        int answer = 0;
        Set<String> set = new HashSet<String>();
        String from = "0 0";

        for(int i=0; i<dirs.length(); i++){
            String target = dirs.split("")[i];
            int x = Integer.parseInt(from.split(" ")[0]);  
            int y = Integer.parseInt(from.split(" ")[1]);

            if(target.equals("U")){
                y += 1;
            }
            else if(target.equals("L")){
                x -= 1;
            }
            else if(target.equals("D")){
                y -= 1;
            }
            else if(target.equals("R")){
                x += 1;
            }
            
            if(x > 5 || y > 5 || x < -5 || y < -5) continue;
            
            String to = Integer.toString(x) + " " +Integer.toString(y);
            set.add(from+" "+to);
            set.add(to+" "+from);
            from = to;
        }
        answer = set.size()/2;
        return answer;
    }
}

HashSet을 사용하여 중복을 제거하는 방식으로 진행하였다.

현재 위치를 from 변수 0 0으로 선언하고

현재 위치로부터 조건에 맞는 좌표로 x y를 이동시킨뒤 to 변수에 저장한다.

좌표는 5를 넘으면 안되므로 조건문을 통하여 해결한다.

 

여기서 중요한점은 0,0에서 0,1로 이동하는 것과 0,1에서 0,0으로 이동하는 것은 동일한 길을 걷는 것이므로

두 경우 모두 set에 추가한다.

그 후 from변수를 to로 바꿔주며 현재위치를 다시 설정한다.

실제 지나오지 않은 길도 추가해주었으므로 set.size()/2를 통해 해결한다.