방문 길이

LJM·2023년 8월 17일
0

programmers

목록 보기
66/92

왔던 경로에 대한 저장이 어려운 문제였다.
고민하다가 참고하였는데 String 으로 좌표를 만들어서 HashSet 으로 해결하였다

import java.util.*;

class Solution {
    public int solution(String dirs) {
        int answer = bfs(5, 5, dirs);
        return answer;
    }
    
    public int bfs(int sx, int sy, String dirs)
    {
        HashSet<String> set = new HashSet<>();
        
        int answer = 0;
        int[] start = new int[2];
        start[0] = sx;
        start[1] = sy;
        
        boolean[][] visit = new boolean[11][11];
 
        visit[sx][sy] = true;    

        int cx = sx;
        int cy = sy;
        
        for(int i = 0; i < dirs.length(); ++i)
        {        
            
            int nx = 0;
            int ny = 0;
            if(dirs.charAt(i)=='U')
            {
                nx = cx;
                ny = cy+1;
            }
            else if(dirs.charAt(i)=='R')
            {
                nx = cx+1;
                ny = cy;
            }
            else if(dirs.charAt(i)=='D')
            {
                nx = cx;
                ny = cy-1;
            }
            else if(dirs.charAt(i)=='L')
            {
                nx = cx-1;
                ny = cy;
            }
            
            if(nx < 0 || nx > 10 || ny < 0 || ny > 10)
                continue;

            String edge1 = cx+","+cy+","+nx+","+ny;
            String edge2 = nx+","+ny+","+cx+","+cy;
            
            if(set.contains(edge1) || set.contains(edge2))
            {
                
            }
            else
            {
                answer++;
            }
            //System.out.println(nx + "," + ny);
            
            set.add(edge1);
            set.add(edge2);
            
            cx = nx;
            cy = ny;
            
        }
        
        return answer;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글