백준|16918번|봄버맨

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
93/136

문제설명
맵에 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로 하니까 겨우 통과가 됬습니다... 다른 분들 풀이를 보니 입력된 시간에 따라서 저는 생각도 못 한 방법으로 계산하시던데 역시 프로그래밍에는 끝이 없는 것 같습니다...

profile
INTP 개발자 지망생

0개의 댓글