๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/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์ดˆ ํ›„์—” ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™” ์—†์œผ๋ฏ€๋กœ ์ดˆ๊ธฐ ์ƒํƒœ ์„ค์ • ์‹œ 1์ดˆ ํ›„์˜ ์ƒํƒœ๋กœ ๋ฐ”๋กœ ์„ค์ •
  2. 2์ดˆ ํ›„๋ถ€ํ„ฐ N์ดˆ ํ›„๊นŒ์ง€์˜ ๋กœ์ง์„ ๊ตฌํ˜„
    for(int i = 1 ; i < N ; i++) == for(int i = 2 ; i <=N ; i++)
  3. map์„ ๋Œ๋ฉฐ, ํญํƒ„ ์‹œ๊ฐ„์„ +1 ํ•จ
    ์ด ๋•Œ, 3์ดˆ๊ฐ€ ์ง€๋‚œ ํญํƒ„์„ ๋งŒ๋‚˜๋ฉด Bomb ํ•จ์ˆ˜ ์‹คํ–‰
  4. 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;
            }
        }
    }
}
๋ฐ˜์‘ํ˜•