[백준] 16918번 봄버맨 (java, 구현)

728x90
반응형

www.acmicpc.net/problem/16918

 

16918번: 봄버맨

첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다.

www.acmicpc.net

골드 1,2 풀다가 실버 푸니까 더 헷갈리는 것 같다

for문을 돌면서 . 인곳을 O를 표시해주고 터트릴 시간을 적어준다. 

큐 없이 풀 수 있는 문제 for문으로 돌면서 체크해놓은 터트리는 시간과 같은 곳을 다시 .으로 만들어준다.

package algo0421;

import java.util.Scanner;

class Pos{
	int y,x;

	public Pos(int y, int x) {
		super();
		this.y = y;
		this.x = x;
	}
	
}

public class B_16918_봄버맨_Main {
	
	static int r,c,n;//n초
	static char[][] map;
	static int[][] num;
	static int[] xpos= {0,0,1,-1};
	static int[] ypos= {1,-1,0,0};
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		
		r=sc.nextInt();
		c=sc.nextInt();
		n=sc.nextInt();
		map=new char[r][c];
		num=new int[r][c];
		for (int i = 0; i < r; i++) {
			String s=sc.next();
			for (int j = 0; j <c; j++) {
				map[i][j]=s.charAt(j);
				if(map[i][j]=='O') {
					num[i][j]=3;
				}
			}
		}
		
		int time=1;
		while(time<n) {
			time+=1;
			install(time);//2,4,6
//			print();
//			print2();
			if(time==n)break;
			time+=1;
			boom(time);//3,5,7
//			print();
//			print2();
		}
		
		print();

	}
	
	private static void install(int time) {
		for (int i = 0; i < r; i++) {
			for (int j = 0; j <c; j++) {
				if(map[i][j]=='.') {
					map[i][j]='O';
					num[i][j]=time+3;
				}
			}
		}
	}

	public static void boom(int time) {
		
		for (int i = 0; i < r; i++) {
			for (int j = 0; j <c; j++) {
				if(num[i][j]==time) {
					map[i][j]='.';
					for (int k = 0; k < 4; k++) {
						int yy=i+ypos[k];
						int xx=j+xpos[k];
						if(yy<0 || xx<0 || yy>=r || xx>=c)continue;
						map[yy][xx]='.';
					}
				}
			}
		
		}
		
	}
	
	public static void print() {
		for (int i = 0; i < r; i++) {
			for (int j = 0; j <c; j++) {
				System.out.print(map[i][j]);
			}
			System.out.println();
		}
//		System.out.println();
	}
	
	public static void print2() {
		for (int i = 0; i < r; i++) {
			for (int j = 0; j <c; j++) {
				System.out.print(num[i][j]);
			}
			System.out.println();
		}
//		System.out.println();
	}
}
728x90
반응형
TAGS.

Comments