본문 바로가기
문제풀이

백준 14503번 로봇청소기 JAVA

by AndoneKwon 2020. 12. 1.

단순한 구현문제이다.

문제의 조건중에

왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다.

중에 "그 방향으로 회전한 다음 한칸 전진하고" 라는 부분을 빼먹어서 틀렸다..

문제를 잘 읽자..

package com.company;
import java.io.*;
import java.util.*;

public class Main {
    static int[] totalPrice;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int[][] map = new int[N][M];

        st = new StringTokenizer(br.readLine());
        int count=0;
        int full=0;

        int X=Integer.parseInt(st.nextToken());
        int Y=Integer.parseInt(st.nextToken());
        int direction=Integer.parseInt(st.nextToken());

        for(int i=0;i<N;i++){
            st = new StringTokenizer(br.readLine());
            for(int j=0;j<M;j++){
                map[i][j]=Integer.parseInt(st.nextToken());
                if(map[i][j]==0)
                    full++;
            }
        }

        map[X][Y]=2;//청소완료
        count++;

        int tryMove=0;
        boolean Move = true;
        while(Move){
            tryMove++;

            int nextX=X;
            int nextY=Y;

            if(direction==0){
                nextY=Y-1;
            }else if(direction==1){
                nextX=X-1;
            }else if(direction==2){
                nextY=Y+1;
            }else if(direction==3){
                nextX=X+1;
            }

            if(map[nextX][nextY]==0){
                map[nextX][nextY]=2;
                X=nextX;
                Y=nextY;
                count++;
                tryMove=0;
                direction--;
                if (direction==-1)
                    direction=3;

                continue;
            }

            if(tryMove!=5&&(map[nextX][nextY]==1||map[nextX][nextY]==2)){
                direction--;
                if(direction==-1){
                    direction=3;
                }
                continue;
            }

            if(tryMove==5){
                //System.out.println("Try Back");
                int backX=X;
                int backY=Y;
                if(direction==0){
                    backX=X+1;
                }else if(direction==1){
                    backY=Y-1;
                }else if(direction==2){
                    backX=X-1;
                }else if(direction==3) {
                    backY=Y+1;
                }
                if(map[backX][backY]==1){
                    Move=false;
                }else{
                    tryMove=0;
                    X=backX;
                    Y=backY;
                    continue;
                }
            }

        }
        System.out.println(count);
        bw.flush();
        bw.close();
    }
}

'문제풀이' 카테고리의 다른 글

백준 2042 구간합 JAVA  (0) 2020.12.22
백준 11559번 Puyo Puyo JAVA  (0) 2020.12.02
백준 1717번 집합의 표현 JAVA  (0) 2020.11.30
백준 1005 ACMCraft JAVA  (0) 2020.11.27
백준 4485번 초록색 옷 입은 애가 젤다지?  (0) 2020.11.27