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

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; } } } } }