본문 바로가기

코딩테스트(백준)

[백준] 17144: 미세먼지 안녕! - JAVA(자바) - 사좋배 공유

https://www.acmicpc.net/problem/17144

 

17144번: 미세먼지 안녕!

미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사

www.acmicpc.net

 

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class robot{
	int x;
	int y;
	int dir;
	robot(int x, int y, int dir){
		this.x=x;
		this.y=y;
		this.dir=dir;
	}
	
}
public class Main {
	static int N;
	static int M;
	static int[][]arr;
	static int[]dx= {-1,0,1,0};
	static int[]dy= {0,1,0,-1};
	static int count;
	static Queue<robot> q;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N=sc.nextInt();
		M=sc.nextInt();
		arr=new int[N][M];
		int locationx=sc.nextInt();
		int locationy=sc.nextInt();
		int dir=sc.nextInt();
		q=new LinkedList<robot>();
		for(int i=0;i<N;i++) {
			for(int j=0;j<M;j++) {
				arr[i][j]=sc.nextInt();
			}
		}
		
		arr[locationx][locationy]=9;
		q.add(new robot(locationx, locationy, dir));
		bfs();
		count=0;
		for(int i=0;i<N;i++) {
			for(int j=0;j<M;j++) {
				if(arr[i][j]==9) {
					count++;
				}
			}
		}
		System.out.println(count);
		
	}
	

	private static void bfs() {
		while(!q.isEmpty()) {
			robot temp = q.poll();
			int x=temp.x;
			int y= temp.y;
			int dir= temp.dir;
			boolean check = false;
			for(int i=0;i<4;i++) {
				dir= (dir+3)%4;
				int rx= x+dx[dir];
				int ry=y+dy[dir];
				if(rx<0||ry<0||rx>=N||ry>=M) {
					continue;
				}if(arr[rx][ry]==0) {
					q.add(new robot(rx,ry,dir));
					arr[rx][ry]=9;
					check=true;
					break;
				}
			}
			if(check==false) {
				int backdir=(dir+2)%4;
				int rx= x+dx[backdir];
				int ry= y+dy[backdir];
				if(arr[rx][ry]!=1) {
					arr[rx][ry]=9;
					q.add(new robot(rx,ry,dir));
				}
				
			}
		}
		
		
	}
}