프로그래머스 - 공원 산책

홍성진·2023년 3월 24일
0

프로그래머스 - 공원 산책

장애물들과 시작점의 위치가 표시된 지도 park가 주어집니다. routes array의 원소 route는 방향과 거리를 표시한 String입니다. 예를 들어 "E 3"이라는 route는 east 방향으로 3칸을 의미합니다. routes를 읽으며 시작점부터 이동할 건데, 중간에 park의 경계를 벗어나거나 장애물을 뚫고 가려는 route에 대한 이동은 아예 실행하지 않습니다. 이 때 최종 위치를 리턴하는 문제입니다. 특별히 한 건 없고, 난이도도 레벨 1로 책정된 것이 단순 구현문제 같습니다.

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int[] answer = {};
        int r = 0;
        int c = 0;
        
        for (int i = 0; i < park.length; i++) {
            for (int j = 0; j < park[0].length(); j++) {
                if (park[i].charAt(j) == 'S') {
                    r = i;
                    c = j;
                }
            }
        }
        
        for (String route : routes) {
            int prevR = r;
            int prevC = c;
            char direction = route.charAt(0);
            int distance = route.charAt(2) - '0';
            
            if (direction == 'N') {
                for (int i = 0; i < distance; i++) {
                    r--;
                    if (r < 0 || park[r].charAt(c) == 'X') {
                        r = prevR;
                        break;
                    }
                }
            }
            
            if (direction == 'S') {
                for (int i = 0; i < distance; i++) {
                    r++;
                    if (r >= park.length || park[r].charAt(c) == 'X') {
                        r = prevR;
                        break;
                    }
                }
            }
            
            if (direction == 'E') {
                for (int i = 0; i < distance; i++) {
                    c++;
                    if (c >= park[0].length() || park[r].charAt(c) == 'X') {
                        c = prevC;
                        break;
                    }
                }
            }
            
            if (direction == 'W') {
                for (int i = 0; i < distance; i++) {
                    c--;
                    if (c < 0 || park[r].charAt(c) == 'X') {
                        c = prevC;
                        break;
                    }
                }
            }
        }
        
        return new int[] {r, c};
    }
}

0개의 댓글