본문 바로가기

백준/구현

로봇

728x90

www.acmicpc.net/problem/13567

 

13567번: 로봇

입력은 표준 입력으로부터 받는다. 첫 줄에는 두 정수 M과 n (1 ≤ M ≤ 1,000, 1 ≤ n ≤ 1,000)이 주어진다. M은 정사각형 S의 한 변의 길이, 즉 오른쪽 맨 위의 좌표는 (M, M)이 된다. n은 로봇이 수행할

www.acmicpc.net

package Implementation;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class robot {

    static int M,N;
    static int[]dx = {1,0,-1,0}; //동서남북
    static int[]dy = {0,-1,0,1};
  //  static int[][]map;
  //  static boolean[][][]visited;

    public static boolean canGo(int x, int y, int n)
    {
        return x >= 0 && y >= 0 && x < n && y < n ;
    }


    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        M = Integer.parseInt(st.nextToken());
        N = Integer.parseInt(st.nextToken());

        int dir=0;
        int x =0; int y =0;

        for(int i=0; i<N; i++){

            String order;
            int num;

            StringTokenizer stoken = new StringTokenizer(br.readLine());

            order = stoken.nextToken();
            num = Integer.parseInt(stoken.nextToken());

            int nx,ny;
            if(order.equals( "MOVE")){
                nx = x+dx[dir]*num;
                ny = y+dy[dir]*num;
                if(canGo(nx,ny,M)){x=nx; y=ny;}
                else{
                    System.out.println(-1);
                    return;
                }
            }
            else if(order.equals("TURN")){
                if(num==0){ //왼쪽으로 90도 회전
                    dir = (dir+4-1)%4;
                }
                else{  //오른쪽으로 90도회전
                    dir = (dir+1)%4;
                }

            }


        }


        System.out.println(x+" "+y);

    }


    }

'백준 > 구현' 카테고리의 다른 글

빙고  (0) 2021.04.15
오리  (0) 2021.04.05
소가 길을 건너간 이유  (0) 2021.04.05
병든 나이트  (0) 2021.03.27
달팽이  (0) 2021.03.27