본문 바로가기
공부/알고리즘

공원 산책

by shining park 2024. 10. 30.

https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

- 나의 풀이

공원 가로길이 w, 세로길이 h

int w = park[0].length();
int h = park.length;

 

✅ 공원 char 이차원배열 ➡︎ 배열 크기 할당 시에, 세로*가로 (🚨[h][w]) 주의

char[][] parkArray = new char[h][w];

좌표처럼 가로가 x, 세로가 y 라고 생각하면 안됨. 아래 그림 내용 참고

문제 설명의 그림 (H-1, W-1) 확인

 

시작점 S 위치 먼저 찾고, 공원 산책 시작

이동중 현재 위치  ➡︎ parkArrays[x][y] (초기값 : 시작점)

  • 동 : → (y++)
  • 서 : ← (y--)
  • 남 : ↓ (x++)
  • 북 : ↑ (x--)

 

✅ 명령 수행 여부 T/F ➡︎ flag

  • 주어진 방향으로 이동할 때, 공원을 벗어나지 않는다 && 주어진 방향으로 이동 중 장애물을 만나지 않는다 ➡︎ true
  • 주어진 방향으로 이동할 때, 공원을 벗어난다 || 주어진 방향으로 이동 중 장애물을 만난다 ➡︎ false

 

- 나의 코드

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int[] answer = new int [2];
        
        //공원 가로길이 w, 세로길이 h
        int w = park[0].length();
        int h = park.length;
        
        //공원 이차배열 h*w
        char[][] parkArray = new char[h][w];
        
        //시작점 S
        for(int i=0; i<h; i++) {
            for(int j=0; j<w; j++) {
                parkArray[i][j] = park[i].charAt(j);
                if(parkArray[i][j] == 'S') {
                    answer[0] = i;
                    answer[1] = j;
                }
            }
        }
        
       //System.out.println("start : " + answer[0] + "," + answer[1]);
        
        //공원산책
        for(String route : routes) {
            char dir = route.charAt(0);
            int cnt = Integer.parseInt(route.substring(2,3));
            
            int x = answer[0];
            int y = answer[1];
            
            boolean flag = true;
            
            for(int i=0; i<cnt; i++) {
                //동 E
                if(dir == 'E' && y+1 < w && parkArray[x][y+1] != 'X') {
                    y++;
                    continue;
                } 
                
                //서 W
                if(dir == 'W' && y-1 >= 0 && parkArray[x][y-1] != 'X') {
                    y--;
                    continue;
                } 
                
                //남 S
                if(dir == 'S' && x+1 < h && parkArray[x+1][y] != 'X') {
                    x++;
                    continue;
                } 
                
                //북 N
                if(dir == 'N' && x-1 >= 0 && parkArray[x-1][y] != 'X') {
                    x--;
                    continue;
                } 
                
                flag = false;
                break;

            }
            
            if(flag) {
                answer[0] = x;
                answer[1] = y;
            }
        }
        
        return answer;
    }
}
 

'공부 > 알고리즘' 카테고리의 다른 글

N-Queen  (0) 2024.11.01
2019 KAKAO BLIND RECRUITMENT > 실패율  (1) 2024.11.01
카펫  (0) 2024.08.03
2024 KAKAO WINTER INTERNSHIP > 가장 많이 받은 선물  (0) 2024.08.01
같은 숫자는 싫어  (0) 2024.08.01