PS

[프로그래머스] 방문 길이 자바 풀이

E58C 2023. 4. 2. 18:05

https://school.programmers.co.kr/learn/courses/30/lessons/49994

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

가장 중요한 것은 0,0 -> 1,01,0 -> 0,0  이 경로는 다르지만.. 이동한 길은 동일하다는 것입니다.

그리고는 별거 없습니다. 배열을 이용해 방문을 표시할까 하다가 머리가 아파서 그냥 list로 비교했습니다.

 

import java.util.*;

class Solution {
    public int solution(String dirs) {
        int answer = 0, x = 0, y = 0, preX = 0, preY = 0;
        List<String> visited = new ArrayList<>();
        visited.add("0000");
        for (int i = 0; i < dirs.length(); i++) {
            preX = x; preY = y;
            switch (dirs.charAt(i)) {
                case 'L':
                    if (x > -5) x--;
                    break;
                case 'R':
                    if (x < 5) x++; 
                    break;
                case 'U':
                    if (y < 5) y++; 
                    break;
                case 'D':
                    if (y > -5) y--; 
                    break;
            }
            if (!visited.contains(preX+""+preY+""+x+""+y+"") && !visited.contains(x+""+y+""+preX+""+preY+"") && !(preX+""+preY+"").equals(x+""+y+"")) {
                visited.add(preX+""+preY+""+x+""+y+""); answer++;
            }
        }
        return answer;
    }
}

경로가 같냐를 비교하기 위해서 if문이 좀 더럽습니다.

[0,0] -> [1,0] 으로 간다고 생각해보면 편합니다.

그리고 x, y 값이 변하지 않았다면 당연히 움직이지 않았겠죠.. 그 부분도 추가했습니다.

 

대망의 테스트.

는 정말 효율이 구립니다~ 통과 못 하는줄~

안녕히계세요뿅