[JAVA/프로그래머스] LV.1 공원산책

윤소영·2023년 8월 11일
0

JAVA

목록 보기
25/41

문제

문제 풀이

import java.util.*;

class Solution {
    public int[] solution(String[] park, String[] routes) {
        HashMap<Character, int[]> map = new HashMap<>();
        map.put('E', new int[]{0,1});
        map.put('W', new int[]{0,-1});
        map.put('N', new int[]{-1,0});
        map.put('S', new int[]{1,0});
        
        int[] start = {0,0};
        for(int i = 0; i < park.length; i++){
            for(int j = 0; j < park[i].length(); j++){
                char c = park[i].charAt(j);
                if(c == 'S'){
                    start[0] = i;
                    start[1] = j;
                }
            }
        }
        
        for(String route : routes){
            char dir = route.charAt(0);
            int moveCnt = route.charAt(2) - 48;
            
            int[] xy = map.get(dir);
            
            int x = xy[0];
            int y = xy[1];
            
            int curX = start[0];
            int curY = start[1];
            
            boolean isOk = true;
            
            for(int i = 0; i < moveCnt; i++){
                curX += x;
                curY += y;
                
                if(curX < 0 || curY < 0 || curX > park.length - 1 || curY > park[0].length() - 1){
                    isOk = false;
                    break;
                }
                if(park[curX].charAt(curY) == 'X'){
                    isOk = false;
                    break; //+x나 +y 했던게 취소되는거임
                }
            }
            if(isOk){
                start[0] = curX;
                start[1] = curY;
            }
        }
        return start;
    }
    
    // private int[] FindStart(String[] park){
    //         for(int i = 0; i < park.length; i++){
    //             for(int j = 0; j < park[i].length(); j++){
    //                 char c = park[i].charAt(j);
    //                 if(c == 'S')
    //                     return new int[]{i, j};
    //             }
    //         }
    //         return new int[]{0, 0};
    //     }
}

답안 풀이

HashMap을 쓰면 될 것 같다 생각하긴 했지만 이를 어떻게 활용해야할지 몰랐다.
일단 map으로 가는 방향과 +1을 해주고 routes 배열에서의 숫자를 moveCnt로 받아 그만큼 가줬다.
가주는 과정에서 범위를 벗어나거나 X가 있으면 break를 통해 취소해준다.
if문에서 걸리지 않으면 최종적으로 S는 이동한다.

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

이런 유용한 정보를 나눠주셔서 감사합니다.

답글 달기