문제설명
맵에 3초가 지나면 자신이 있는 칸과 상하좌우 주변 한칸 씩 폭파시키는 폭탄을 둘 때 일정시간이 지난 후의 맵의 상태를 나타내는 문제입니다.
작동 순서
1. 맵의 크기와 시간을 입력받습니다.
2. 맵의 현재 상태를 입력받습니다.
3. 시간이 지나면서 맵에 있는 폭탄들의 설치 후 시간을 증가시킵니다. 만약 설치한지 3초가된 폭탄이 있으면 큐에 위치를 삽입합니다.
4. 큐에서 설치된지 3초과된 폭탄들의 위치를 꺼내서 그 칸과 상하좌우를 빈칸으로 표시합니다.
5. 빈칸은 3으로 표시합니다.
6. 일정 시간이 지난후의 맵을 출력합니다.
소스코드
import sys
from collections import deque
R, C, N = map(int, sys.stdin.readline().split())
gameMap = []
second = 1
move = [[-1, 0], [1, 0], [0, -1], [0, 1]]
q = deque()
for i in range(R):
gameMap.append(list(sys.stdin.readline().rstrip()))
for j in range(C):
if gameMap[i][j] == '.':
gameMap[i][j] = 3
else:
gameMap[i][j] = 1
while second < N:
for i in range(R):
for j in range(C):
if gameMap[i][j] == 0 or gameMap[i][j] == 1:
gameMap[i][j] += 1
elif gameMap[i][j] == 2:
q.append([i, j])
else:
gameMap[i][j] = 0
while q:
x, y = map(int, q.popleft())
gameMap[x][y] = 3
for search in range(4):
if R > x+move[search][0] >= 0 and C > y+move[search][1] >= 0:
gameMap[x+move[search][0]][y+move[search][1]] = 3
second += 1
for i in range(R):
for j in range(C):
if gameMap[i][j] == 3:
print('.', end="")
else:
print('O', end="")
print()
후기
코드가 되게 비효율적이라서 pypy로 하니까 겨우 통과가 됬습니다... 다른 분들 풀이를 보니 입력된 시간에 따라서 저는 생각도 못 한 방법으로 계산하시던데 역시 프로그래밍에는 끝이 없는 것 같습니다...