문제 : https://www.acmicpc.net/problem/14503

 

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음

www.acmicpc.net

문제 요약 : 로봇이 청소하는 칸 수 출력

입력 출력

3 ≤ N,M(크기) ≤ 50

1 ≤ R < N

1 ≤ C <M

d = 0(북), 1(동), 2(남), 3(서)

[N][M] = 0(빈 칸), 1(벽)

로봇이 청소하는 칸 수 출력

 

JAVA

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
16356986 cbkpar 14503 맞았습니다!! 13292KB 76ms Java 1367B
import java.io.*;

public class Main {

	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int[] dx = {0,1,0,-1}; // 북동남서
		int[] dy = {-1,0,1,0};
		int n,m,y,x,d,i,j;
		String str = "";
		str = br.readLine();
		String[] arr = str.split(" ");
		n = Integer.parseInt(arr[0]);
		m = Integer.parseInt(arr[1]);
		
		str = br.readLine();
		arr = str.split(" ");
		y = Integer.parseInt(arr[0]);
		x = Integer.parseInt(arr[1]);
		d = Integer.parseInt(arr[2]);
		int[][] map = new int[n][m];
		for(i=0;i<n;i++) {
			str = br.readLine();
			arr = str.split(" ");
			for(j=0;j<m;j++) {
				map[i][j] = Integer.parseInt(arr[j]);
			}
		}
		int clean = 0;
		while(true) {
			if(map[y][x]==0) { //청소가능 여부
				map[y][x]=2;
				clean++;
			}
            //왼쪽으로 돌아가면서 청소가 가능한지 확인
			if(map[y+dy[(d+3)%4]][x+dx[(d+3)%4]]==0) {
				d=(d+3)%4;
				y+=dy[d];
				x+=dx[d];
				continue;
			}
			if(map[y+dy[(d+2)%4]][x+dx[(d+2)%4]]==0) {
				d=(d+2)%4;
				y+=dy[d];
				x+=dx[d];
				continue;
			}
			if(map[y+dy[(d+1)%4]][x+dx[(d+1)%4]]==0) {
				d=(d+1)%4;
				y+=dy[d];
				x+=dx[d];
				continue;
			}
			if(map[y+dy[d]][x+dx[d]]==0) {
				y+=dy[d];
				x+=dx[d];
				continue;
			}
            
            //4방향 청소가 불가능 하다면
			if(map[y+dy[(d+2)%4]][x+dx[(d+2)%4]]==1) {
				break; //뒤에 벽이 있으면 종료
			}else {
            //벽이 없을경우 후진
				y+=dy[(d+2)%4];
				x+=dx[(d+2)%4];
				continue;
			}
		}
		System.out.println(clean);
	}
}

 

+ Recent posts