r,c,n = map(int,input().split())
area = [list(input()) for _ in range(r)]
flag = False
dx = [-1,1,0,0]
dy = [0,0,-1,1]
for i in range(r): # 초기 상태에서 1초 지난 상태로 초기화
for j in range(c):
if area[i][j] == "O":
area[i][j] = 2
for _ in range(n-1): # n-1초 간 3 ~ 4과정 반복
for i in range(r): # 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치
for j in range(c):
if area[i][j] == ".": # 빈칸에는 폭탄설치
area[i][j] = 3
else: # 폭탄은 1초 시간 경과
area[i][j] -= 1
temp_area = [item[:] for item in area] # 값 덮어쓰기를 방지하기 위해 별도의 2차원 배열 사용
for i in range(r): # 3초 전에 설치된 폭탄이 모두 폭발
for j in range(c):
if area[i][j] != "." and area[i][j] <= 0:
temp_area[i][j] = "."
for k in range(4):
temp_x = i + dx[k]
temp_y = j + dy[k]
if 0 <= temp_x < r and 0 <= temp_y < c:
temp_area[temp_x][temp_y] = "."
area = temp_area
for i in range(r):
for j in range(c):
if area[i][j] != ".":
area[i][j] = "O"
for i in range(r):
print("".join(area[i]))
이번 문제는 r x c 크기의 직사각형 격자판에서 매 초마다 빈칸에는 폭탄을 설치하고, 폭탄이 3초가 경과한 경우에는 상하좌우를 포함하여 폭발하도록 하였을 때, N초가 지난 후의 격차판 상태를 구하는 문제이다.
먼저 폭탄의 시간을 카운팅하기 위해 폭탄을 o가 아니라 폭발까지 남은 시간으로 저장해주고, n-1번 만큼 3-4번 과정을 반복해주었다.
중간에 문제 조건과 값을 잘못 이해하여 시간을 많이 잡아먹게 되었는데, 앞으로 문제를 풀이할 때는 문제가 길더라도 정확하게 파악한 뒤에 풀도록 해야겠다.
'Algorithm 💡 > Implementation' 카테고리의 다른 글
[백준 14719번] 빗물 (0) | 2024.01.15 |
---|---|
[백준 20291번] 파일 정리 (0) | 2024.01.06 |
[백준 15721번] 번데기 (1) | 2023.12.28 |
[프로그래머스 PCCP 모의고사 2-1번] 붕대 감기 (0) | 2023.11.18 |
[프로그래머스 PCCP 모의고사 1번] 실습용 로봇 (0) | 2023.11.11 |