공원 산책

Heeeoh·2023년 8월 9일
0

프로그래머스

목록 보기
20/26
post-thumbnail

🧫 문제 분석

✔️ 출처

프로그래머스 공원 산책 정답률 39%

📖 문제



예전에 풀었던 폭탄? 문제랑 비슷하다. 문자열 + 배열 문제

🔅 문제 풀이


class Solution {
    public int[] solution(String[] park, String[] routes) {

        String[][] map = new String[park.length][park[0].length()];

        // S의 x,y좌표 얻기
        int x = 0, y = 0;
        for(int i = 0; i < park.length; i++) {
            map[i] = park[i].split("");

            if((park[i].indexOf('S')) > -1){
                x = park[i].indexOf('S');
                y = i;
            }

        }


        // 강아지의 위치 
        int[] answer = {y,x};    

        // 방향 구분
        for(String location : routes) {
            int value = ((int)location.charAt(location.length()-1)) - '0';

            if(location.contains("E")) 
                moving(map,answer,1,value);
            
            else if(location.contains("W"))
                moving(map,answer,2,value);
            
            else if(location.contains("S"))
                moving(map,answer,3,value);
            
            else if(location.contains("N"))
                moving(map,answer,4,value);

        }


        return answer;
    }

    // 동쪽: 1, 서쪽 : 2 남쪽: 3 북쪽: 4 가정
     public void moving(String[][] park, int[] dog, int xy, int value) {
        int xi = dog[1];
        int yi = dog[0];

        if(xy == 1) {
            for(int i = 0; i < value; i++) {
                xi++;
                if(park[0].length <= xi ||park[yi][xi].equals("X"))
                    return;              
            }
            dog[1] = xi;
            System.out.println(dog[1]);
        }else if(xy == 2) {
            for(int i = 0; i < value; i++) {
                xi--;
                if(0 > xi ||park[yi][xi].equals("X"))
                    return;              
            }
            dog[1] = xi;


        }else if(xy == 3) {
            for(int i = 0; i < value; i++) {
                yi++;
                if(park.length <= yi ||park[yi][xi].equals("X"))
                    return;              
            }
            dog[0] = yi;


        }else {
            for(int i = 0; i < value; i++) {
                yi--;
                if(0 > yi ||park[yi][xi].equals("X"))
                    return;              
            }
            dog[0] = yi;
        }
    } 
}


개인적으로 어려워서 시간을 많이썼다..
다른 사람 풀이중에 아예 x,y의 -1과 +1로 배열을 따로 만들어서 방향에 따라 이동 값을 여기에 곱해서 값을 더하는 방식이 있던데 정말 고수들이다..

❗ 오답노트 / 필요한 지식

  1. park[yi][xi].equals("X") 여기서 park[xi].equals("x)만 써서 틀렸었다. 무슨생각으로 저렇게 한건지 모르겠다. 당연히 정확한 좌표값을 줘야하는데 실수다..
2. 항상 느끼는 거지만 간단한 방법을 생각해보자. 음수는 -1을 곱하면 된다는 것을 기억하자. 


profile
열심히 살자

0개의 댓글