[문제]
문제 : 백준 16918번_봄버맨
솔직히 어려웠다.. 시뮬레이션은 처음이였음
참고로 봄버맨 2 문제도 있는데 무려 골드 문제

[의사(구현) 코드]
[입력]
1. R, C, N : 격자판의 행, 열, 시간
2. grid : R줄에 걸쳐 초기 격자 상태
- 각 칸은 '.' 또는 'O' (빈칸 또는 폭탄)
[구현]
3. 만약 N이 1이면
- 아무 일도 없으니까 grid 그대로 반환
4. 만약 N이 짝수이면 (2, 4, 6,...)
- 격자판 전체를 폭탄('O')으로 채운 걸 반환
5. 그렇지 않으면 (N이 홀수이고 1이 아님이면)
- 두 번 폭발을 시뮬해야 함
5-1. first : 초기 grid에서 폭탄을 터뜨린 결과 (3초 상태)
5-2. second : first에서 다시 폭탄을 터뜨린 결과 (5초 상태)
5-3. N % 4 == 3이면 : first 반환 (3초, 7초, 11초 등)
5-4. N % 4 == 1이면 : second 반환 (5초, 9초, 13초 등)
폭탄이 터지는 함수 bomb(grid)
- 새로 만든 격자를 전부 'O'로 채움
- 원래 grid에 폭탄이 있는 위치와 그 상하좌우를 모두 '.'로 바꿈
[출력]
6. 반환된 격자(result)를 한 줄씩 출력
- 리스트를 문자열로 합쳐서 print()
[코드]
import sys
input = sys.stdin.readline
# 폭탄 터뜨리는 함수
def bomb(grid, R, C):
result = [['O'] * C for _ in range(R)] # 일단 전부 폭탄으로 가득 채우자
for i in range(R):
for j in range(C):
if grid[i][j] == 'O': # 이전 상태에 폭탄이 있다면
result[i][j] = '.' # 자기 자신은 빈 칸
for dx, dy in [(-1,0), (1,0), (0,-1), (0,1)]: # 상하좌우
ni, nj = i + dx, j + dy
if 0 <= ni < R and 0 <= nj < C:
result[ni][nj] = '.' # 인접한 칸도 펑
return result
# 문제 전체(입력)
def bomberman():
R, C, N = map(int, input().split()) # 행, 열, 시간 입력
grid = [list(input().strip()) for _ in range(R)] # 초기 상태
if N == 1:
return grid # 아무 일 없음. 그대로임
elif N % 2 == 0:
return [['O'] * C for _ in range(R)] # 짝수 초는 전부 폭탄임
else:
first = bomb(grid, R, C) # 3초 때 폭발
second = bomb(first, R, C) # 5초 때 폭발
return first if N % 4 == 3 else second # 3, 7, 11초... : 첫 폭발과 같은 결과
# 5, 9, 13초... : 두 번째 폭발과 같은 결과
# 출력
result = bomberman()
for row in result:
print(''.join(row)) # 리스트를 문자열로 합쳐서 출력
[제출 결과]
'코딩테스트 > 백준 문제' 카테고리의 다른 글
[파이썬] 백준 5532번(브론즈4) : 방학 숙제 (0) | 2025.05.19 |
---|---|
백준 151문제 풀고 느낀 점 : "뭔가 잘못되었다" (1) | 2025.05.03 |
[파이썬] 백준 1260번 : DFS와 BFS (0) | 2025.05.02 |
[파이썬] 백준 26068번 : 치킨댄스를 추는 곰곰이를 본 임스 2 (0) | 2025.04.29 |
[파이썬] 백준 10093번 : 숫자 (0) | 2025.04.20 |