티스토리 뷰

본 글은 다크모드에 최적화되어 있습니다.

학기 중에는 해설 로직을 포함하지 않습니다.

문제

https://www.acmicpc.net/problem/16918

 

16918번: 봄버맨

첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다.

www.acmicpc.net

언어

자바 Java

코드

'0'이 아니라 'O'입니다;;;; 이거 때문에 시간 날렸네요.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    private static final int[] dx = {1, -1, 0, 0};
    private static final int[] dy = {0, 0, 1, -1};
    private static char[][] board;
    private static List<int[]> bombCoordinate = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        String[] input = br.readLine().split(" ");
        int r = Integer.parseInt(input[0]);
        int c = Integer.parseInt(input[1]);
        int n = Integer.parseInt(input[2]);

        board = new char[r][c];
        for (int i = 0; i < r; i++) {
            String str = br.readLine();
            for (int j = 0; j < c; j++)
                board[i][j] = str.charAt(j);
        }

        int time = 0;
        for (int i = 0; i < n - 1; i++) {
            if (time == 0) {
                fillBoard();
                time = 1;
            } else {
                explodeBomb();
                time = 0;
            }
        }

        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++)
                sb.append(board[i][j]);
            sb.append("\n");
        }

        System.out.println(sb);
    }

    private static void fillBoard() {
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                if (board[i][j] == 'O')
                    bombCoordinate.add(new int[]{j, i});
                board[i][j] = 'O';
            }
        }
    }

    private static void explodeBomb() {
        for (int[] coordinate : bombCoordinate) {
            int x = coordinate[0];
            int y = coordinate[1];
            board[y][x] = '.';
            for (int d = 0; d < 4; d++) {
                int nx = x + dx[d];
                int ny = y + dy[d];
                if (ny < 0 || ny >= board.length || nx < 0 || nx >= board[ny].length)
                    continue;
                board[ny][nx] = '.';
            }
        }
        bombCoordinate.clear();
    }
}

 

 

Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30