문제
https://www.acmicpc.net/problem/16918
걸린 시간
00 : 39 : 20
풀이
C++
#include <bits/stdc++.h>
#define INF 1e9
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int r, c, n;
int dy[4] = {1, -1, 0, 0};
int dx[4] = {0, 0, -1, 1};
vector<vector<int>> grid;
void boom(int y, int x){
grid[y][x] = 0;
for(int i = 0; i < 4; i++){
int ny = y+dy[i];
int nx = x+dx[i];
if(0 <= ny && ny < r && 0 <= nx && nx < c)
if(grid[ny][nx] != 1)
grid[ny][nx] = 0;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> r >> c >> n;
grid.resize(r, vector<int>(c, 0));
// 0 ~ 1 sec
char init;
for(int y = 0; y < r; y++)
for(int x = 0; x < c; x++){
cin >> init;
if(init == 'O') grid[y][x] = 2;
else grid[y][x] = 0;
}
// 2 ~ n sec
for(int i = 2; i <= n; i++){
if(i%2 == 0){ // 폭탄 설치
for(int y = 0; y < r; y++)
for(int x = 0; x < c; x++)
if(grid[y][x] == 0) grid[y][x] = 3;
else if(grid[y][x] > 0) grid[y][x]--;
}
else{ // 폭팔
for(int y = 0; y < r; y++)
for(int x = 0; x < c; x++)
if(grid[y][x] == 1) boom(y, x);
else if(grid[y][x] > 0) grid[y][x]--;
}
}
for(int y = 0; y < r; y++){
for(int x = 0; x < c; x++)
if(grid[y][x] > 0) cout << 'O';
else cout << '.';
cout << "\n";
}
return 0;
}
쉬운 구현 문제였지만 예외를 처리해주는 과정에서 시간이 조금 걸렸다. bfs 로도 풀 수 있다고 하는데 어떻게 가능한지 궁금하다.
'Baekjoon' 카테고리의 다른 글
Baekjoon 14466번 소가 길을 건너간 이유 6 (0) | 2020.10.23 |
---|---|
Baekjoon 1800번 인터넷 설치 (0) | 2020.10.21 |
Baekjoon 17780번 새로운 게임 (0) | 2020.10.19 |
Baekjoon 15591번 MooTube (Silver) (0) | 2020.10.19 |
Baekjoon 10021번 Watering the Fields (0) | 2020.10.15 |
댓글