출처: https://3months.tistory.com/307 [Deep Play]

백준/Simulation

[BOJ] 16918 봄버맨

코딩하는 랄뚜기 2022. 1. 18. 20:59

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

 

16918번: 봄버맨

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

www.acmicpc.net

 

그래프 이론과 구현이 융합된 문제이다.

처음에 아무것도 일어나지 않아 조금 헷갈리는 문제이나 실버여서 그런지 쉽다.

터져야 되는 폭탄을 queue에 넣고 3초 뒤에 그 size만큼 반복문을 돌리며 폭탄이 설치된 칸과 인접한 네칸을 빈 칸처리 해주었다.

#include <iostream>
#include <queue>
#include <utility>
using namespace std;

int R,C,N;
int dx[]={-1,1,0,0};
int dy[]={0,0,1,-1};

char map[200][200];

int main(){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>R>>C>>N;
    queue<pair<int,int> > q;
    for(int i=0;i<R;i++){
        for(int j=0;j<C;j++){
            cin>>map[i][j];
            if(map[i][j]=='O') q.push(make_pair(i,j));
        }
    }
    
    N--;
    
    
    while(N){
        int s=q.size();
        //1초 후에 맵 전체에 폭탄
        for(int i=0;i<R;i++){
            for(int j=0;j<C;j++){
                if(map[i][j]=='.'){
                    map[i][j]='O';
                }
            }
        }

        if(--N==0) break;
        
        //1초 후에 전에 설치된 폭탄 폭파
        for(int i=0;i<s;i++){
            int y=q.front().first, x=q.front().second;
            q.pop();
            map[y][x]='.';
            for(int j=0;j<4;j++){
                int ny=y+dy[j], nx=x+dx[j];
                if(0<=ny&&ny<R&&0<=nx&&nx<C){
                    map[ny][nx]='.';
                }
            }
        }

        if(--N==0) break;
        
        //2초 뒤에 터질 폭탄 queue에 넣기
        for(int i=0;i<R;i++){
            for(int j=0;j<C;j++){
                if(map[i][j]=='O'){
                    q.push(make_pair(i,j));
                }
            }
        }
    }
    
    for(int i=0;i<R;i++){
        for(int j=0;j<C;j++) cout<<map[i][j];
        cout<<'\n';
    }
    return 0;
}

 

'백준 > Simulation' 카테고리의 다른 글

[BOJ] 15684 사다리조작  (0) 2022.02.02
[BOJ] 17281 ⚾  (0) 2022.01.31
[BOJ] 12100 2048(Easy)  (0) 2022.01.21
[BOJ] 15683 감시  (0) 2022.01.18
[BOJ] 3190 뱀  (0) 2022.01.18