SSONG Cloud
[백준] 16928 봄버맨 본문
반응형
문제 출처: https://www.acmicpc.net/problem/16918
16918번: 봄버맨
첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다.
www.acmicpc.net
1. 입력
: 첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다.
2. 출력
: 총 R개의 줄에 N초가 지난 후의 격자판 상태를 출력한다.
3. 풀이
: 다음 차례에 터질 폭탄은 X로 터지지 않을 폭탄은 O로 하여 구분해준다.
: 시간을 1초씩 세면서 우선 폭탄이 있는 자리는 X로 바꾸고, 폭탄이 없는 자리는 폭탄을 놓아야 하기 때문에 O로 바꿔준다.
: 그 다음 1초에서는 X로 된 자리들이 사방으로 폭발해야 하기 때문에 폭발하고 나서 .으로 바꿔준다.
: 마지막에 답을 출력할 때는 X였던 자리들 또한 O로 바꿔 폭탄임을 알려준다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
static int R, C, N;
static char[][] map;
static int[] dr = { -1, 1, 0, 0 };
static int[] dc = { 0, 0, -1, 1 };
public static void main(String[] args) throws Exception {
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];
for (int i = 0; i < R; i++) {
String tmp = br.readLine();
for (int j = 0; j < C; j++) {
map[i][j] = tmp.charAt(j);
}
}
for (int t = 1; t < N; t++) {
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (map[i][j] == 'O') {
map[i][j] = 'X';
} else if (map[i][j] == '.') {
map[i][j] = 'O';
}
}
}
t++;
if (t >= N) {
break;
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (map[i][j] == 'X') {
map[i][j] = '.';
change(i, j);
}
}
}
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (map[i][j] == 'X')
map[i][j] = 'O';
sb.append(map[i][j]);
}
sb.append("\n");
}
System.out.println(sb);
}
private static void change(int r, int c) {
for (int i = 0; i < 4; i++) {
int nr = r + dr[i];
int nc = c + dc[i];
if (nr < 0 || nr >= R || nc < 0 || nc >= C || map[nr][nc] == 'X')
continue;
map[nr][nc] = '.';
}
}
}
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준] 12761 돌다리 (0) | 2021.06.17 |
---|---|
[백준] 14923 미로 탈출 (0) | 2021.06.17 |
[백준] 숨바꼭질 (0) | 2021.06.16 |
[백준] 3584 가장 가까운 공통 조상 (0) | 2021.06.16 |
[백준] 18258 큐 2 (0) | 2021.06.15 |
Comments