프로그래머스 | LV.1 공원 산책 - 단순 구현 문풀 (Java)

728x90

⬛ 프로그래머스 | LV.1 공원 산책 - 단순 구현 문풀 (Java)

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

 

프로그래머스

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

programmers.co.kr

설명1
설명2
설명3


💚문제 접근 방식

  • 명령어에 따른 현재 좌표를 갱신하는 문제인데, 명령어를 무시하는 조건은 1) 경계값 벗어날 경우 2) 가는 도중 ‘X’ 장애물 만날 경우이다.
  • 일단 nx와 ny를 명령어에 따라 이동 시키고, 무시해야할 조건에 걸리는 명령어라면 갱신하지 않고, 그렇지 않다면 계속해서 st[] 에 이동한 좌표를 갱신하며 풀면 된다.

💚 제출 코드

import java.util.*;

class Solution {
    //솔루션 함수 
    public int[] solution(String[] park, String[] routes) {
        int[] answer = new int[2];
        
        int N = park.length;
        int M = park[0].length();
        
        char[][] map = new char[N][M];
        
        int[] st = new int[2];
        for(int i=0; i<N; i++){
            map[i] = park[i].toCharArray();
            if(park[i].contains("S")){
                st[0] = i;
                st[1] = park[i].indexOf("S");
            }
        }
        
        for(String route : routes){
            String quer = route.split(" ")[0];
            int len = Integer.parseInt(route.split(" ")[1]);
            
            int nx = st[0];
            int ny = st[1];
            
            for(int i=0; i<len; i++){
                if(quer.equals("E")){ //동 열(y)++ 
                    ny++;
                }
                if(quer.equals("W")){//서 (열) y--
                    ny--;
                }
                if(quer.equals("S")){//남 (행) x++
                    nx++;
                }
                if(quer.equals("N")){//북 (열)x--
                    nx--;
                }
                //명령 무시 이전으로 돌아가기 
                if(nx < 0 || ny <0 || nx >= N || ny >= M || map[nx][ny] == 'X'){
                    break;
                } 
                //그게 아니면 변경
                if(i == len-1){
                    st[0] = nx;
                    st[1] = ny;
                    System.out.println(st[0]+ " "+st[1] );
                }
            }
        }
        
        answer[0] = st[0];
        answer[1] = st[1];
        
        
        return answer;
    }
}

💚 시간 복잡도

park나 route나 둘다 최대 50까지 들어온다. 여기서 각 명령어별로 이중 for문 돌면서 처리를 해주고 있지만, 데이터 크기가 50 정도이기 때문에 O(2500) 최악으로 두어번 돈다고 하더라도 크게 시간복잡도를 잡아먹지는 않는다.

728x90