본문 바로가기
알고리즘/백준

[백준 16918] 봄버맨 (C++)

by Bloofer 2021. 1. 17.

A. 문제설명

www.acmicpc.net/problem/16918

 

16918번: 봄버맨

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

www.acmicpc.net

문제에 대한 자세한 설명은 링크 참조

 

1. C*R 크기의 배열이 존재

2. 봄버맨이 해당 배열안에 폭탄을 설치하는 데 그 규칙은 다음과 같다.

ㆍ가장 처음에 봄버맨은 일부 칸에 폭탄을 설치해 놓는다. 모든 폭탄이 설치된 시간은 같다.
ㆍ다음 1초 동안 봄버맨은 아무것도 하지 않는다.
ㆍ다음 1초 동안 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다. 즉, 모든 칸은 폭탄을 가지고 있게 된다. 폭탄은 모두 동시에 설치했다고 가정한다.
ㆍ1초가 지난 후에 3초 전에 설치된 폭탄이 모두 폭발한다.
ㆍ3과 4를 반복한다.

3. N초가 지났을 때, 해당 배열안의 상태를 출력할 것

 

B. 접근법

시뮬레이션

 

간단한 시뮬레이션 문제이다. 다만 문제 조건에서 3초 대기하여 폭탄이 터지고 그 사이에 빈칸에 새로 폭탄을 설치하는 과정이 있는데, 사실상 해당 초에 대해 1초로 감안하고 푸는 것이 문제 풀이에 맞다. 문제 독해가 필요한 부분

 

C. 풀이

1. 초기 폭탄 설치: 1, 빈칸: -1

2. 폭탄 없는 나머지 공간 폭탄 설치, 폭탄 있는 공간엔 시간 감소

3. 폭탄 폭발 및 연쇄 작용

3-1. 폭발할 위치를 boom[][]에 기록

3-2. boom[][]에 체크된 위치에서 폭발을 수행

4. N초 후의 배열 상태를 출력

 

D. 내 코드