1. 문제
https://www.acmicpc.net/problem/16918
2. 풀이과정
문제분석
2단계에서 이미 설치된 폭탄은 무조건 다음 단계에서 터지게 되어있다.
[case1] 초기에 설치된 폭탄은 1초 대기후, 2단계 => 3단계를 거치기 때문에 3초에 터진다.
[case2] 2단계에서 새로 설치한 폭탄 => 3=>2(이미 설치된 폭탄으로 취급됨)=>3단계에서 터진다.
구현방법
1. 이미 설치된 폭탄의 위치를 배열에 저장
2. 다음 단계(주어진 문제에서 3단계에 해당)에서 4방향 탐색을 하며 '.'으로 폭탄이 터진 것을 표시해준다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
static int R, C, N;
static int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
static char map[][];
public static void simulation(){
ArrayList<int[]> bombs = new ArrayList<>();
for(int t=0; t<N; t++){
if(t%2==0){
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
if(map[i][j]=='.'){map[i][j] = 'O';}
else{bombs.add(new int[]{i, j});}
}
}
}
else{
for(int[] bomb : bombs){
map[bomb[0]][bomb[1]] = '.';
for(int k=0; k<4; k++){
int nx = bomb[0]+dx[k];
int ny = bomb[1]+dy[k];
if(nx<0 || nx>=R || ny<0 || ny>=C){ continue;}
map[nx][ny] = '.';
}
}
bombs = new ArrayList<>();
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputs[] = br.readLine().split(" ");
R = Integer.parseInt(inputs[0]);
C = Integer.parseInt(inputs[1]);
N = Integer.parseInt(inputs[2])-1;
map = new char[R][C];
for(int i=0; i<R; i++){
String input = br.readLine();
for(int j=0; j<C; j++){
map[i][j] = input.charAt(j);
}
}
//
simulation();
StringBuilder sb = new StringBuilder();
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
sb.append(map[i][j]);
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 14719번 : 빗물 (0) | 2022.12.11 |
---|---|
[Java] 백준 3190번 : 뱀 (1) | 2022.12.10 |
[Java] 백준 3665번 : 최종 순위 (0) | 2022.12.08 |
[Java] 백준 2110번 : 공유기 설치 (0) | 2022.12.07 |
[Java] 백준 13418번 : 학교 탐방하기 (0) | 2022.12.06 |