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

AMUD·2023년 8월 26일
0

Algorithm

목록 보기
71/78

문제

문제링크

접근

  • 처음에는 방문 여부를 체크하면서 정답을 늘려야 하나 고민했지만, set을 이용하면 중복처리를 쉽게 할 수 있을 것 같아서 그 방향으로 생각하였다.
  • 중요한 부분은 모든 선분에 대해 고유한 수로 나타내는 getIndex를 잘 작성하면 크게 어려운 부분 없다. (약간 hashCode를 얻기 위한 해싱 함수라 생각하면 편하다)

풀이

import java.util.*;

class Solution {
    Set<Integer> visited = new HashSet<>();
    int[][] ds = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
    public int solution(String dirs) {
        int r = 0, c = 0;
        for (char d : dirs.toCharArray()) {
            int di = d == 'D' ? 0 : d == 'U' ? 1 : d == 'R' ? 2 : 3; 
            int nr = r + ds[di][0];
            int nc = c + ds[di][1];
            
            if (nr < -5 || nr > 5 || nc < -5 || nc > 5) continue;
            
            visited.add(getIndex(r, c, nr, nc));
            r = nr;
            c = nc;
        }
        
        return visited.size();
    }
    
    private int getIndex(int r, int c, int nr, int nc) {
        int lr = (nr + r + 10) * 2;
        int lc = (nc + c + 10) * 2;
        int res = lr * 100 + lc;
        return res;
    }
}
profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글