BOJ - 16918번 봄버맨 (C++)

woga·2020년 11월 30일
0

BOJ

목록 보기
73/83
post-thumbnail

문제 출처: https://www.acmicpc.net/problem/16918

문제 난이도

Silver 1


문제 접근법

문제를 읽고 구현하는 문제. 그래프 탐색을 적절히 이용하면 됐다.


통과 코드

#include <iostream>
#include <algorithm>
#include <queue>

#define INF 987654321

using namespace std;

char arr[201][201];
int R, C, N;
int dy[4][2] = { {-1,0},{1,0},{0,-1},{0,1} };

void allInstall() {
	for (int i = 0; i < R; i++) {
		for (int j = 0; j < C; j++) {
			arr[i][j] = 'O';
		}
	}
}

int main() {
	cin >> R >> C >> N;
	queue<pair<int, int>> q;
	for (int i = 0; i < R; i++) {
		for (int j = 0; j < C; j++) {
			cin >> arr[i][j];
			if (arr[i][j] == 'O') {
				q.push({ i,j });
			}
		}
	}
	bool flag = true;
	while (--N) { // N초가 다 지나고 N+1번째 격자판 상태가 아닌,  N-1초가 지나고 N번째 격자판 상태를 보여주기 위함
		if (flag) {
			allInstall();
			flag = false;
			continue;
		}
		while (!q.empty()) {
			int x = q.front().first;
			int y = q.front().second;
			arr[x][y] = '.';
			q.pop();
			for (int k = 0; k < 4; k++) {
				int nx = x + dy[k][0];
				int ny = y + dy[k][1];
				if (nx < 0 || ny < 0 || nx >= R || ny >= C || arr[nx][ny] == '.') continue;
				arr[nx][ny] = '.';
			}
		}
		for (int i = 0; i < R; i++) {
			for (int j = 0; j < C; j++) {
				if (arr[i][j] == 'O') {
					q.push({ i,j });
				}
			}
		}
		flag = true;
	}

	for (int i = 0; i < R; i++) {
		for (int j = 0; j < C; j++) {
			cout << arr[i][j];
		}
		cout << "\n";
	}
	return 0;
}
profile
와니와니와니와니 당근당근

0개의 댓글