첫번째 폭발에서 모든 범위가 터지게 되면
첫 폭탄배치가 복원되지 않는다.
ex)
OO. … OOO
OOO → … → OOO
OOO … OOO
처음 배치가 복원되지 않는다.
먼저 첫번째 폭발을 계산해서 남아있는 폭탄을 계산하고, → A
첫번째 폭탄에서 남아있는 폭탄의 폭발을 계산해서 남아있는 폭탄을 계산하면 → B
그 다음에는 4마다 일정한 패턴으로 반복된다.
첫배치 → 첫배치 → (모든배치 → A배치 → 모든배치 → B배치) * N …
'''
16918 봄버맨
'''
import sys
def print_graph(R, graph):
for j in range(R):
print(''.join(graph[j]))
R, C, N = map(int, sys.stdin.readline().split())
graph = [list(sys.stdin.readline().strip()) for _ in range(R)]
exp_graph = [['O' for _ in range(C)] for _ in range(R)]
rev_graph = [['O' for _ in range(C)] for _ in range(R)]
all_graph = [['O' for _ in range(C)] for _ in range(R)]
delta = ((-1, 0), (1, 0), (0, -1), (0, 1))
for j in range(R):
for i in range(C):
if graph[j][i] == 'O':
exp_graph[j][i] = '.'
for dy, dx in delta:
if R > j+dy >= 0 and C > i+dx >= 0:
if exp_graph[j+dy][i+dx] == 'O':
exp_graph[j+dy][i+dx] = '.'
for j in range(R):
for i in range(C):
if exp_graph[j][i] == 'O':
rev_graph[j][i] = '.'
for dy, dx in delta:
if R > j+dy >= 0 and C > i+dx >= 0:
if rev_graph[j+dy][i+dx] == 'O':
rev_graph[j+dy][i+dx] = '.'
# print(graph)
# print(rev_graph)
if N==0 or N==1:
print_graph(R, graph)
elif N%2 == 0:
print_graph(R, all_graph)
elif N%4 == 3:
print_graph(R, exp_graph)
elif N%4 == 1:
print_graph(R, rev_graph)
'프로그래밍 > acmcpc' 카테고리의 다른 글
[1106] 호텔 (0) | 2025.09.24 |
---|---|
[2447] 별 찍기 10 (0) | 2025.09.24 |
[1992] 쿼드트리 (0) | 2025.09.11 |
[1987] 알파벳 (0) | 2025.09.10 |
[1707] 이분 그래프 (0) | 2025.09.10 |