본문 바로가기
프로그래밍/acmcpc

[16918] 봄버맨

by blopz 2025. 9. 11.

첫번째 폭발에서 모든 범위가 터지게 되면

첫 폭탄배치가 복원되지 않는다.

 

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