import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BoomberMan {
static int R,C,N;
static char[][] map;
static char[][] map2;
static char[][] all;
static int[] dr = {0,1,0,-1};
static int[] dc = {1,0,-1,0};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
R = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
map = new char[R][C];
map2 = new char[R][C];
char[][] initmap = new char[R][C];
all = new char[R][C];
for (int i = 0; i < R; i++) {
String str = br.readLine();
for (int j = 0; j < C; j++) {
initmap[i][j] = str.charAt(j);
map[i][j] = 'O';
map2[i][j] = 'O';
all[i][j] = 'O';
}
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if(initmap[i][j]=='O'){
Bomb(i,j);
}
}
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if(map[i][j]=='O'){
Bomb2(i,j);
}
}
}
StringBuilder initprint = new StringBuilder();
for (int i = 0; i < R; i++) {
initprint.append(initmap[i]).append("\n");
}
StringBuilder bombprint = new StringBuilder();
for (int i = 0; i < R; i++) {
bombprint.append(map[i]).append("\n");
}
StringBuilder allprint = new StringBuilder();
for (int i = 0; i < R; i++) {
allprint.append(all[i]).append("\n");
}
StringBuilder bomb2print = new StringBuilder();
for (int i = 0; i < R; i++) {
bomb2print.append(map2[i]).append("\n");
}
if(N==1){
System.out.println(initprint);
return;
}
if(N%2==0){
System.out.println(allprint);
}
else if(N%4==1)
System.out.println(bomb2print);
else if(N%4==3)
System.out.println(bombprint);
}
public static void Bomb(int row, int col){
map[row][col] = '.';
for (int i = 0; i < 4; i++) {
int nrow = row + dr[i];
int ncol = col + dc[i];
if(nrow<0||ncol<0||nrow>=R||ncol>=C)
continue;
map[nrow][ncol] = '.';
}
}
public static void Bomb2(int row, int col){
map2[row][col] = '.';
for (int i = 0; i < 4; i++) {
int nrow = row + dr[i];
int ncol = col + dc[i];
if(nrow<0||ncol<0||nrow>=R||ncol>=C)
continue;
map2[nrow][ncol] = '.';
}
}
}
📢 이문제의 핵심은 초에 따라 일정 장면이 반복되서 출력된다는 점이다.
첫번째 장면 : 초기 입력값 map
두번째 장면 : 전부 O
세번째 장면 : 초기 입력값에서 폭발한 map
네번째 장면 : 세번째 장면에서 폭발한 map
따라서 N이 1 일때를 제외하고, 2초마다 두번째 장면 출력,
N%4 == 1 경우에는 세번째 장면 출력
N%4 == 3 경우에는 네번째 장면 출력
이러한 방식으로 출력되어야 한다.
🔉예제에서는 마치 첫번째 장면과 네번째 장면이 같은것처럼 나온다.
하지만 반례가 있기에 따로 구분해주어야 한다.
첫번째 장면과 네번째 장면이 같다고 생각하고 풀었는데, 함정이 있었다.
규칙을 찾을때 신중하게 찾아야겠다.