자바/코딩테스트

[프로그래머스] 방문 길이 - Java(자바)

대전집주인 2024. 4. 1. 17:41
728x90
SMALL

 

문제 이해

  • 좌표문제로 좌표 범위는 -5 ~ 5까지로 해당 범위를 나가면 안된다.
  • 문자열은 상하좌우를 뜻하는 LRUD가 있다.
  • 문제의 핵심은 좌표범위를 벗어나지 않고 처음가는 길인곳의 길이를 구하는것이다.
  • A -> B == B -> A 두개의 길은 같은길로 처리한다.
  • 리스트에 좌표를 움직이기 전 좌표 + 움직인 후 좌표, 움직인 후 좌표 + 움직이기 전 좌표 로 두가지 경우를 둘다 넣어 문자열로 담아놨다.
  • indexOf를 사용하여 리스트에 존재 하지 않으면 처음 가는길로 간주했다.
import java.util.*;
class Solution {
    public int solution(String dirs) {
        List<String> visit = new ArrayList();
        
        int answer = 0;
        int[] point = new int[2];
        point[0] = 0;
        point[1] = 0;
        
        for(int i = 0; i<dirs.length(); i++){
            
            int x = point[0];
            int y = point[1];
            
            if(dirs.charAt(i) == 'L'){
                x -= 1;
            }else if(dirs.charAt(i) == 'R'){
                x += 1;
            }else if(dirs.charAt(i) == 'U'){
                y += 1;
            }else if(dirs.charAt(i) == 'D'){
                y -= 1;
            }
            
            if(x >= -5 && x <= 5 && y >= -5 && y <= 5){
                String tmp = Integer.toString(point[0]+5) + Integer.toString(point[1]+5) 
                + Integer.toString(x+5) + Integer.toString(y+5);
                
                String tmp1 = Integer.toString(x+5) + Integer.toString(y+5)
                    + Integer.toString(point[0]+5) + Integer.toString(point[1]+5);
                if(visit.indexOf(tmp) == -1){
                    visit.add(tmp);
                    visit.add(tmp1);
                    answer++;
                }
                
                point[0] = x;
                point[1] = y;
            }
        }
        
        return answer;
    }
}
728x90
LIST