"다음 1초 동안 봄버맨은 아무것도 하지 않는다." 이 규칙을 통해 N == 1일 때는 처음과 상태가 같다는 것을 알 수 있다.
"다음 1초 동안 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다. 즉, 모든 칸은 폭탄을 가지고 있게 된다. 폭탄은 모두 동시에 설치했다고 가정한다." 이 규칙에서 2초에 모든 칸에 폭탄이 설치되는 것을 알 수 있고, 이것이 2초마다 반복 되는 것을 알 수 있다. 따라서 N이 짝수일 때는 모든 칸에 폭탄이 설치되어있다.
N이 3이상일 때는 폭탄의 위치를 List에 담아두고 모든 칸을 폭탄으로 채운 뒤 이전에 저장해둔 폭탄의 위치에서 4방향을 빈 공간으로 만들어주었다. 이 작업은 총 2초에 걸쳐 진행되기 때문에 N을 2씩 감소시키며 반복했다.
폭탄이 설치되는 패턴, 규칙을 찾아내는 것이 관건이 문제이다.
import java.io.*;
import java.util.*;
public class Main {
static int[] dx = {-1,0,1,0};
static int[] dy = {0,-1,0,1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int R = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
List<Point> list = new ArrayList<Point>();
char[][] arr = new char[R][C];
for (int i = 0; i < R; i++) {
String temp = br.readLine();
for (int j = 0; j < C; j++) {
if(temp.charAt(j) == 'O') list.add(new Point(i,j));
arr[i][j] = temp.charAt(j);
}
}
if(N==1) {
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
return;
}
if(N%2==0) {
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
System.out.print("O");
}
System.out.println();
}
return;
}
while(N>=3) {
list.clear();
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if(arr[i][j]=='O') list.add(new Point(i,j));
}
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
arr[i][j] = 'O';
}
}
for (int i = 0; i < list.size(); i++) {
arr[list.get(i).x][list.get(i).y] = '.';
for(int j=0; j<4; j++) {
int nx = list.get(i).x + dx[j];
int ny = list.get(i).y + dy[j];
if(nx >= 0 && ny >= 0 && nx < R && ny < C) arr[nx][ny] = '.';
}
}
N = N-2;
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
static class Point {
int x,y;
protected Point(int x, int y) {
this.x = x;
this.y = y;
}
}
}
'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글
[Java] BOJ1697_숨바꼭질 (0) | 2021.04.29 |
---|---|
[Java] BOJ16926_배열 돌리기 1 (0) | 2021.04.29 |
[Java] BOJ1660_캡틴 이다솜 (0) | 2021.04.23 |
[Java] BOJ16234_인구 이동 (0) | 2021.04.23 |
[Java] BOJ1620_나는야 포켓몬 마스터 이다솜 (0) | 2021.04.23 |