접근
https://www.acmicpc.net/problem/16918
단순 구현 문제였습니다. 각 칸에 폭탄이 생긴지 얼마나 지났는지를 표시하고, 폭탄이 없는 칸은 -1로 표시하였습니다. 폭탄이 모두 동시에 터진다는 것에 주의하며 탐색해주었습니다.
추가적으로 규칙성도 찾을 수 있었는데, 0, 1 즉, 처음 위치에서 1초가 지날때까지는 문제에 따라 달라질 수 있지만, 2, 3, 4, 5초에 해당하는 모습이 그 뒤로도 계속 반복된다는 것입니다. 따라서 게임이 시작되고 5초가 지날 때까지의 지도의 모습을 저장해두고, N의 수에 따라 해당하는 지도를 표시함으로써 시간을 단축할 수 있었습니다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;
public class Main {
static int R, C, N;
static int[][][] map;
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 int[R][C][6];
for (int i = 0; i < R; i++) {
String input = br.readLine();
for (int j = 0; j < C; j++) {
if (input.charAt(j) == '.') {
map[i][j][0] = -1;
} else {
map[i][j][0] = 0;
}
}
}
br.close();
for (int i = 0; i < 5; i++) {
calculate(i);
}
if (N < 2) {
printmap(N);
} else {
printmap((N - 2) % 4 + 2);
}
}
static void printmap(int n) {
StringBuilder sb = new StringBuilder();
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
if (map[r][c][n] == -1) {
sb.append('.');
} else {
sb.append('O');
}
}
sb.append('\n');
}
System.out.print(sb.toString());
}
static void calculate(int n) {
if (n % 2 == 0 || n == 0) {
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
if (map[r][c][n] == -1) {
map[r][c][n + 1] = -1;
} else {
map[r][c][n + 1] = map[r][c][n] + 1;
}
}
}
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
if (map[r][c][n] == 2) {
map[r][c][n + 1] = -1;
for (int i = 0; i < 4; i++) {
int nr = r + dr[i];
int nc = c + dc[i];
if (nr < 0 || R <= nr || nc < 0 || C <= nc) continue;
map[nr][nc][n + 1] = -1;
}
}
}
}
} else {
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
map[r][c][n + 1] = map[r][c][n] + 1;
}
}
}
}
}
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (JAVA)' 카테고리의 다른 글
백준 17182번: 우주 탐사선 (Java) (0) | 2022.08.09 |
---|---|
백준 16967번: 배열 복원하기 (Java) (0) | 2022.08.07 |
백준 14529: Where's Bessie? (Java) (0) | 2022.08.06 |
백준 10875번: 뱀 (Java) (0) | 2022.07.25 |
백준 9881번: Ski Course Design (0) | 2022.07.20 |
최근댓글