CODING TEST

프로그래머스 - 공원 산책

우진하다 2023. 5. 18. 22:27

나의 풀이. - 실패

앞선 문제를 해결해서 쉽게 풀 수 있을거라 생각했는데 으...
이틀동안 낑낑대다 걍 답보고 정리만..
접근 방식은 비슷하나 예외처리에 있어 꽤 애먹었다.
이 문제는 50프로만 이해한걸로.. 답이 궁금하신 분들만 아래를 참고해 달라달라

    

import java.util.*;

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};
        char[] dir = {'N', 'E', 'S', 'W'};
        char[][] board = new char[park.length][];
        int x = 0, y = 0;
        
        for (int i = 0; i < park.length; i++) {
            board[i] = park[i].toCharArray();
            for (int j = 0; j < board[0].length; j++) {
                if (board[i][j] == 'S') {
                    x = i;
                    y = j;
                }
            }
        }
        
        for (String tmp : routes) {
            char cmd = tmp.split(" ")[0].charAt(0);
            int dis = Integer.parseInt(tmp.split(" ")[1]);
            boolean flag = true;
            int nx = 0, ny = 0;
            
            for (int k = 0; k < 4; k++) {
                if (cmd == dir[k]) {
                    nx = x;
                    ny = y;
                    
                    for (int i = 0; i < dis; i++) {
                        nx = nx + dx[k];
                        ny = ny + dy[k];
                        
                        if (nx < 0 || nx >= board.length || 
                        ny < 0 || ny >= board[0].length || 
                        board[nx][ny] == 'X') {
                            flag = false;
                            break;
                        }
                    }
                }
            }
            
            if (flag == false) {
                continue;
            }
            
            x = nx;
            y = ny;
        }
        
        return new int[]{x, y};
    }
}