알고리즘

[알고리즘]청소로봇 작동하기(feat.n*n이차원 배열)_java

seulhasony 2023. 5. 30. 23:00

문제

격자판의 크기와 문자열을 인자로 입력받아, 청소로봇에 명령을 내린 문자들이 차례대로 이동시키다가

최종적으로 멈춘 위치를 반환하는 프로그램을 작성하시오. 

~로봇~        
         
         
         
         

 

조건1. n*n 크기의 이차원 배열 격자판 0행 0열이 청소 로봇이 시작 위치

조건2. 'U' 명령은 로봇이 위쪽으로 한 칸 이동합니다. 

조건3. 'R' 명령은 로봇이 오른쪽으로 한 칸 이동합니다.

조건4. 'L' 명령은 로봇이 왼쪽으로 한 칸 이동합니다.

조건5. 'D' 명령은 로봇이 아래쪽으로 한 칸 이동합니다.

조건6. 만약 로봇이 명령을 수행하다가, 격자판 밖으로 나가는 경우에는 해당 명령을 수행하지 않습니다.


문제풀이

class Solution{
    public int[] solution(int n ,String moves){
        int[] dx = {-1,0,1,0};
        int[] dy = {0,1,0,-1};
        
        //로봇청소기의 현재 위치
        int x =0,  y =0;

        char[] move = {'U','R','D','L'}; //위,오른쪽,아래,왼쪽
        for(char c : moves.toCharArray()){
            for(int k = 0; k < 4; k++){
                if(c == move[k]){
                    x = x + dx[k];
                    y = y + dy[k];
					
                    /* 
                    * 행(x)과 열(y)이 0보다 작거나 n(격자판의 크기)보다
                    * 큰 경우는 더한 값을 다시 빼준다.
                    */
                    if(x < 0 || x >= n || y < 0 || y >= n){
                        x = x - dx[k];
                        y = y - dy[k];
                    }
                }
            }
        }
        return new int[]{x, y};
    }
}

시뮬레이션의 알고리즘은 아래의 배열의 초기값을 그냥 무조건 외워두는게 좋을 것 같다!

    int[] dx = {-1,0,1,0};
    int[] dy = {0,1,0,-1};

 

dx[0] dy[0]: 위

dx[1] dy[1]: 오른쪽

dx[2] dy[2]: 아래

dx[2] dy[2]: 왼쪽