daniel7481의 개발일지

[BOJ]16918 봄버맨 본문

BOJ

[BOJ]16918 봄버맨

daniel7481 2022. 7. 6. 18:11
반응형

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

 

16918번: 봄버맨

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

www.acmicpc.net

풀이

이번에는 그래프 문제 중에서 시뮬레이션 문제로, 내가 좋아하는 유형이었다. 문제집 중에서 직접 광탈하면서 모은 코테라는 문제집을 친절하게도 만들어주신 분이 계셔서, 코테를 준비하는 나로써는 매일 풀어보고 있다. 문제는 굉장히 복잡해 보이고, 3초마다 계산해야 할 것처럼 보이지만, 사실 n이 1인 경우를 제외하고 보면 n이 짝수인지 홀수인지 따라 나오는 값은 정해져 있다. 만약 짝수라면 무조건 모든 그래프가 O로 채워져 있고, 홀수라면 전체가 O로 채워진 그래프에서 전에 할당해놓은 폭탄들은 인접한 칸을 빈칸으로 만들어준 값을 반환하기만 하면 된다. 각 경우의 수를 나눠서 구현해주면 되는 문제였다.

import sys
from collections import deque
input = lambda: sys.stdin.readline().rstrip()
r, c, n = map(int, input().split())
mtr = [input() for _ in range(r)]
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
bomb = [[mtr[i][j] for j in range(c)]for i in range(r)]
cnt = 1
if n == 1:
    for i in range(r):
        for j in range(c):
            print(bomb[i][j], end = '')
        print()
else:
    if n % 2 == 0:
        for i in range(r):
            for j in range(c):
                print('O', end = '')
            print()
    else:
        for i in range(n//2):
            ans = [["O" for _ in range(c)] for _ in range(r)]
            for j in range(r):
                for k in range(c):
                    if bomb[j][k] == 'O':
                        ans[j][k] = '.'
                        for h in range(4):
                            nx = j + dx[h]
                            ny = k + dy[h]
                            if nx < 0 or ny < 0 or nx >= r or ny >= c:
                                continue
                            if ans[nx][ny] == 'O':
                                ans[nx][ny] = '.'
            for j in range(r):
                for k in range(c):
                    bomb[j][k] = ans[j][k]
        for i in range(r):
            for j in range(c):
                print(ans[i][j], end = '')
            print()
반응형

'BOJ' 카테고리의 다른 글

[BOJ]8972 미친 아두이노  (0) 2022.07.08
[BOJ]16967 배열 복원하기  (0) 2022.07.06
[BOJ]15591 MooTube(Silver)  (0) 2022.07.03
[BOJ]1743 음식물 피하기  (0) 2022.06.28
[BOJ] 2251 물통  (0) 2022.06.28