본문 바로가기
알고리즘/문제 풀이

프로그래머스: 공원 산책(lv1)

by 위대한초밥V 2023. 6. 17.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

설명

단순 구현 문제인데 생각했던 것보다 시간을 매우 많이 잡아먹어서 정리한다. 

주의해야할 점은 산책할 때, 점프해서 가는게 아니라 해당 지점까지 한칸씩 이동하면서 간다. 

따라서 가는 도중에 장애물을 만나면 안된다. 

코드

import java.util.*;

class Solution {
    static int[] move = new int[2];
    static int[][] map;
    static int height, width;
    
    public int[] solution(String[] park, String[] routes) {
        int[] answer= {};
        height = park.length;
        width = park[0].length();
          
        map = new int[height][width];
        
        for(int i = 0; i < height; i++) {
            for(int j = 0; j < width; j++) {
                if(park[i].charAt(j) == 'S') {
                    move[0] = i;
                    move[1] = j;
                    map[i][j] = 1;
                }
                else if(park[i].charAt(j) == 'O') {
                    map[i][j] = 0;
                }
                else if(park[i].charAt(j) == 'X'){
                    map[i][j] = -1;
                }
            }
        }
        
        int[] temp = move;
        
        for(String st : routes) {
            String way = st.split(" ")[0];
            int len = Integer.parseInt(st.split(" ")[1]);
            
            int ny = move[0];
            int nx = move[1];
            
            // 길이만큼 해당 방향으로 이동한다.
            for(int i = 0; i < len; i++) {
                if(way.equals("N")) {
                    ny--;  
                } 
                else if(way.equals("S")) {
                    ny++;
                }
                else if(way.equals("W")) {
                    nx--;
                }
                else if(way.equals("E")){
                    nx++;
                }
                
                if(ny < 0 || ny >= height || nx < 0 || nx >= width) {
                    continue;
                }
                
                if(map[ny][nx] == -1) {
                    break;
                }
                
                if(i == len - 1) {
                    move[0] = ny;
                    move[1] = nx;                    
                }
            }
        }
        
        answer = move;
        return answer;
    }
}
반응형