(프로그래머) 공원에서 산책

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

생각하다

쉬운 구현은 아니라고 생각합니다. 태스크에서 주어진 조건을 구현하고 최종 위치를 반환합니다.

알고리즘 문제를 풀고 있는데 계속해서 방법의 이름이 생각난다. 그게 맞는지 궁금합니다

솔루션 – 그래프 탐색, 구현

import java.util.*;
class Solution {
    private char()() board;
    private int n,m;
    private int nowX,nowY;
    private final static int dx() = {0,1,0,-1};
    private final static int dy() = {1,0,-1,0};
    public int() solution(String() park, String() routes) {
        convertToCharArr(park);
        for(String route : routes){
            StringTokenizer st = new StringTokenizer(route, " ");
            // 동0 남1 서2 북3
            int dir = getDirFrom(st.nextToken());
            int dist = Integer.parseInt(st.nextToken());
            
            if(checkIfCanGo(dir, dist)){
                nowX += dist * dx(dir);
                nowY += dist * dy(dir);
            }
            
        }
        
        return new int(){nowX, nowY};
    }
    private boolean isIn(int x, int y){
        return x >= 0 && y >= 0 && x < n && y < m;
    }
    private boolean checkIfCanGo(int dir, int dist){
        for(int i = 1; i<=dist; i++){
            int nx = nowX + i * dx(dir);
            int ny = nowY + i * dy(dir);
            if(!isIn(nx,ny)) return false;
            if(board(nx)(ny) == 'X') return false;
            
        }
        return true;
    }
    private int getDirFrom(String dirStr){
        switch(dirStr){
            case "E": return 0;
            case "S": return 1;
            case "W": return 2;
            case "N": return 3;
        }
        return -1;
    }
    private void convertToCharArr(String() park){
        n = park.length;
        m = park(0).length();
        board = new char(n)(m);
        for(int i = 0; i<n; i++){
            for(int j = 0; j<m; j++){
                board(i)(j) = park(i).charAt(j);
                if(board(i)(j) == 'S'){
                    nowX = i;
                    nowY = j;
                }
            }
        }
        
    }

}