๐ ์๊ณ ๋ฆฌ์ฆ/Simulation
[๋ฐฑ์ค] 16918๋ฒ: ๋ด๋ฒ๋งจ (JAVA)
์ ์ด
2022. 3. 29. 01:07
๋ฐ์ํ
๋ฌธ์ (Silver 1)
https://www.acmicpc.net/problem/16918
16918๋ฒ: ๋ด๋ฒ๋งจ
์ฒซ์งธ ์ค์ R, C, N (1 ≤ R, C, N ≤ 200)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ R๊ฐ์ ์ค์ ๊ฒฉ์ํ์ ์ด๊ธฐ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๋น ์นธ์ '.'๋ก, ํญํ์ 'O'๋ก ์ฃผ์ด์ง๋ค.
www.acmicpc.net
ํ์ด
์๋ฎฌ๋ ์ด์ ์ ์ฐจ๋ก๋๋ก๋ง ๊ตฌํํ์!
- ์ค์น ํ, 1์ด ํ์ ์๋ฌด๋ฐ ๋ณํ ์์ผ๋ฏ๋ก ์ด๊ธฐ ์ํ ์ค์ ์ 1์ด ํ์ ์ํ๋ก ๋ฐ๋ก ์ค์
- 2์ด ํ๋ถํฐ N์ด ํ๊น์ง์ ๋ก์ง์ ๊ตฌํ
for(int i = 1 ; i < N ; i++) == for(int i = 2 ; i <=N ; i++) - map์ ๋๋ฉฐ, ํญํ ์๊ฐ์ +1 ํจ
์ด ๋, 3์ด๊ฐ ์ง๋ ํญํ์ ๋ง๋๋ฉด Bomb ํจ์ ์คํ - Bomb ํจ์์์ ์ด๋ฏธ 0์ด ์ฒ๋ฆฌ๊ฐ ๋ ํญํ์ ๋ค์ +1 ํ์ง ์๋๋ก visited ์ฒ๋ฆฌ!
์ฝ๋
๋๋ณด๊ธฐ
package simulation;
import java.io.*;
import java.util.*;
public class BOJ_16918_๋ด๋ฒ๋งจ {
static int[] di = {-1, 0, 1, 0};
static int[] dj = {0, -1, 0, 1};
static int R,C,N;
static int[][] map;
static boolean[][] visited;
public static void main(String[] args) throws Exception {
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];
/* ์ด๊ธฐ์ํ์ 1์ด ํ๊ฐ ๊ฐ์ผ๋, ๋ฐ๋ก ํญํ์ ๋ฐ๋ก 2์ด๋ก ์ค์ */
for(int i =0 ; i < R ; i++){
String str = br.readLine();
for(int j = 0 ; j < C ; j++){
map[i][j] = str.charAt(j)=='.'?0:2;
}
}
/* 1๋ถํฐ ์์! N=3์ด๋ฉด 2์ด ํ, 3์ด ํ๋ง ๋ด! ์์์ 1์ด ํ ์ค์ ํด์คฌ์ผ๋๊น */
for(int k = 1 ; k <N ; k++){
visited = new boolean[R][C];
for(int i = 0 ; i < R ; i++){
for(int j =0 ; j < C ; j++){
if(visited[i][j]) continue; // Bomb ํ ๋ ์ง๋๊ฐ ๊ณณ์ด๋ผ๋ฉด ๋์ด๊ฐ
if(++map[i][j] == 4){ // 3์ด๊ฐ ์ง๋ ํญํ์ด๋ฉด
map[i][j] = 0; // 0์ด๋ก ์ค์ ํ๊ณ
bomb(i, j); // ํญ๋ฐ!
}
visited[i][j] = true;
}
}
}
for (int i =0 ; i < R ; i++){
for(int j =0 ; j < C ; j++){
System.out.print(map[i][j]==0?'.':'O');
}
System.out.println();
}
}
private static void bomb(int i, int j) {
for(int d = 0 ; d < 4 ; d++){
int ni = i + di[d];
int nj = j + dj[d];
if(0<=ni&&ni<R && 0<=nj&&nj<C){
if(!visited[ni][nj] && map[ni][nj] == 3) continue; // ๋์์ ํญ๋ฐ๋ ๊ณณ์ด๋ฉด, ๋จ๊ฒจ๋
map[ni][nj] = 0;
visited[ni][nj] = true;
}
}
}
}
๋ฐ์ํ