16918 - 봄버맨
2025. 3. 6. 16:29ㆍPS/백준
문제
https://www.acmicpc.net/problem/16918
느낀점
처음에는 4번마다 반복된다고 생각해서 4로 나눈 나머지를 이용해서 풀었는데, 바로 틀렸다.. 그래서 그냥 시뮬레이션 하듯이 각 경우를 생각해주었다.. 아직도 ==1, %4 == 1의 차이를 모르겠지만.. 어쨌든 풀었다.
풀이
#include <iostream>
#include <set>
#include <string>
#include <vector>
using namespace std;
#define pii pair<int, int>
vector<pii> direction = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
void bomb(int R, int C, int N, vector<string> &board, vector<vector<int>> &check)
{
int timer = 2;
while (1)
{
if (timer == N + 1)
{
break;
}
else if (timer % 2 == 0)
{
for (int i = 0; i < R; i++)
{
for (int j = 0; j < C; j++)
{
if (board[i][j] == '.')
{
board[i][j] = 'O';
check[i][j] = timer + 3;
}
}
}
}
else
{
for (int i = 0; i < R; i++)
{
for (int j = 0; j < C; j++)
{
if (check[i][j] == timer)
{
board[i][j] = '.';
check[i][j] = -1;
for (size_t k = 0; k < direction.size(); k++)
{
int dy = i + direction[k].first;
int dx = j + direction[k].second;
if (dx < 0 || dx >= C || dy < 0 || dy >= R)
{
continue;
}
board[dy][dx] = '.';
}
}
}
}
}
timer++;
}
}
int main()
{
int R, C, N;
cin >> R >> C >> N;
vector<string> board(R);
vector<vector<int>> check(R, vector<int>(C, -1));
for (size_t i = 0; i < R; i++)
{
cin >> board[i];
for (size_t j = 0; j < board[i].size(); j++)
{
if (board[i][j] == 'O')
{
check[i][j] = 3;
}
}
}
bomb(R, C, N, board, check);
for (int i = 0; i < R; i++)
{
for (int j = 0; j < C; j++)
{
cout << board[i][j];
}
cout << "\n";
}
return 0;
}
'PS > 백준' 카테고리의 다른 글
17276 - 배열 돌리기 00 | 2025.03.08 |
---|---|
16924 - 십자가 찾기 00 | 2025.03.07 |
9081 - 단어 맞추기 00 | 2025.03.05 |
3495 - 아스키 도형 00 | 2025.03.04 |
2615 - 오목 00 | 2025.03.04 |