공원 산책

문제


문제 풀이

park 일차원 배열을 2차원 배열로 변경을 하고 start 위치를 cur로 입력하고 시작. 

route 값에 있는 방향가 움직임 크기를 가지고 그 값이 배열의 크기를 초과하거나 x가 있는 값이 있는곳을 지날 때 다음 반복문을 시행하도록 하였음. 


나의 답안

public static int[] solution(String[] park, String[] routes) {
    int width = park[0].length();
    int height = park.length;
    int[] cur = {};
    String[][] newPark = new String[height][width];

    for (int i = 0; i < park.length; i++) {
        for (int j = 0; j < park[i].length(); j++) {
            if (park[i].charAt(j) == 'S') {
                cur = new int[]{i, j};
                newPark[i][j] = "S";
            } else if (park[i].charAt(j) == 'O') {
                newPark[i][j] = "O";
            } else {
                newPark[i][j] = "X";
            }
        }
    }

    for (String str : routes) {
        String direction = str.split(" ")[0];
        int move = Integer.parseInt(str.split(" ")[1]);

        if (move >= width || move >= height) continue;

        int moveResult;
        dir:
        switch (direction) {
            case "N":
                moveResult = cur[0] - move;
                if (moveResult < 0) continue;
                for (int i = 1; i <= move; i++) {
                    if ("X".equals(newPark[cur[0] - i][cur[1]])) break dir;
                }
                cur[0] = moveResult;
                break;
            case "S":
                moveResult = cur[0] + move;
                if (moveResult >= height) continue;
                for (int i = 1; i <= move; i++) {
                    if ("X".equals(newPark[cur[0] + i][cur[1]])) break dir;
                }
                cur[0] = moveResult;
                break;
            case "W":
                moveResult = cur[1] - move;
                if (moveResult < 0) continue;
                for (int i = 1; i <= move; i++) {
                    if ("X".equals(newPark[cur[0]][cur[1] - i])) break dir;
                }
                cur[1] = moveResult;
                break;
            case "E":
                moveResult = cur[1] + move;
                if (moveResult >= width) continue;
                for (int i = 1; i <= move; i++) {
                    if ("X".equals(newPark[cur[0]][cur[1] + i])) break dir;
                }
                cur[1] = moveResult;
                break;
        }
    }
    return cur;
}

'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글

추억 점수  (0) 2023.03.31
바탕화면 정리  (0) 2023.03.29
신고 결과 받기  (0) 2023.03.29
개인정보 수집 유효기간  (0) 2023.03.29
대충 만든 자판  (0) 2023.03.28