[Java] 공원 산책 - Lv1 프로그래머스

P.S./프로그래머스 2023. 3. 24. 12:19
728x90
728x90

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

 

프로그래머스

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

programmers.co.kr

 

 

풀이


어떻게하면 코드를 줄일 수 있을까 생각하다가 결국 원점으로 돌아와버렸다

방위 선택이나 이동시키는 과정에서 단축시키는 재귀함수를 생각해보았는데 결국 빙빙돌아서 해결이 되지 않았다

 

다시 원초적으로 돌아와서 쭉 나열해서 풀어서 성공했다.

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int startX = 0;
        int startY = 0;
        int xLength = park[0].length();
        int yLength = park.length;
        char[][] parking = new char[park.length][park[0].length()];
        for(int i=0; i<park.length; i++) {
        	for(int j=0; j<park[i].length(); j++) {
        		parking[i][j] = park[i].charAt(j);
        		if(park[i].charAt(j) == 'S') {
        			startX = j;
        			startY = i;
        		}
        	}
        }        
        
        String[] where = new String[routes.length];
        int[] length = new int[routes.length];
        for(int i=0; i<routes.length; i++) {
        	where[i] = routes[i].split(" ")[0];
        	length[i] = Integer.parseInt(routes[i].split(" ")[1]);
        }       
        
        char now = 0;
        int nowX = startX;
        int nowY = startY;
        for(int i=0; i<routes.length; i++) {
        	for(int j=1; j<=length[i]; j++) {
        		switch(where[i]) {
        		case "E":
        			if(startX+length[i] >= xLength) break;
        			now = parking[startY][startX + j];
        			nowX = startX+j;
        			break;
        		case "W":
        			if(startX-length[i] < 0) break;
        			now = parking[startY][startX - j];
        			nowX = startX-j;
        			break;
        		case "S":
        			if(startY+length[i] >= yLength) break;
        			now = parking[startY+j][startX];
        			nowY = startY+j;
        			break;
        		case "N":
        			if(startY-length[i] < 0) break;
        			now = parking[startY-j][startX];
        			nowY = startY-j;
        			break;
        		}
        		if(now == 'X' || now == 0) {
        			nowX = startX;
        			nowY = startY;
        			break;
        		}      		
        	}
        	if(now != 'X' && now != 0) {
            	startX = nowX;
            	startY = nowY;
        	}        	
    	}
        return new int[]{startY, startX};        	
    }
}

코드를 간결화 하는 습관을 기르고 싶은데 머리속에 있는걸 코드로 작성하는 능력이 많이 부족하다 ㅠㅠ

 

728x90
300x250
mag1c

mag1c

2년차 주니어 개발자.

방명록