반응형
✨IDEA
N이 작기에 매초마다 모든 maps(graph)를 보면서 폭탄을 터뜨리거나 폭탄을 설치하면 된다
폭탄이 새로설치되면 그 위치는 3으로 표시하고 폭탄이 존재하지 않는 위치는 -1로 표시한다
init() : 시작시 폭탄이 설치되어있는 위치를 3초라는 의미에서 3으로 변경, 폭탄이 없는 자리는 -1
is_in(r, c) : 폭탄을 터트릴 때 maps(graph) 밖으로 나가는 것을 체크하는 함수
insert_bomb(R, C) : 폭탄이 설치되어있지 않은 위치(-1)이면 새롭게 폭탄을 설치(3)
bomb() : 맵 전체를 탐색해 폭탄이 있는 위치를 검색하고 폭탄을 터뜨림
deal_time() : 일초가 지날 때마다 맵에 기재된 시간을 갱신
CODE
import sys
from collections import deque
input = sys.stdin.readline
deltas = [[-1, 0], [1, 0], [0, -1], [0, 1]]
R, C, N = map(int, input().split())
graph = [list(input().rstrip()) for _ in range(R)]
def init():
for r in range(R):
for c in range(C):
if(graph[r][c] == 'O'):
graph[r][c] = 3
elif(graph[r][c] == '.'):
graph[r][c] = -1
def is_in(r, c):
return r >= 0 and r < R and c >= 0 and c < C
def insert_bomb(R, C):
for r in range(R):
for c in range(C):
if(graph[r][c] == -1):
graph[r][c] = 3
def bomb(graph):
q = deque()
for r in range(R):
for c in range(C):
if(graph[r][c] == 0):
q.append([r, c])
while(q):
r, c = q.popleft()
graph[r][c] = -1
for delta in deltas:
nr = r + delta[0]
nc = c + delta[1]
if(not is_in(nr, nc)):
continue
else:
graph[nr][nc] = -1
def deal_time():
for r in range(R):
for c in range(C):
if(graph[r][c] != -1):
graph[r][c] -= 1
def game(N):
time = 0
# 주어진 시간이 될 때 까지 폭탄을 설치, 터뜨리는 과정을 반복
while(N != time):
time += 1
deal_time()
if(time == 1):
continue
# 2초부터 2초마다 모든 부분에 폭탄을 설치
if(time % 2 == 0):
insert_bomb(R, C)
# 폭탄 터트리기
bomb(graph)
for r in range(R):
for c in range(C):
if(graph[r][c] == -1):
graph[r][c] = '.'
else:
graph[r][c] = 'O'
init()
game(N)
for r in range(R):
print("".join(graph[r]))
반응형
'🔧알고리즘' 카테고리의 다른 글
[프로그래머스][파이썬] 옹알이(1) (0) | 2022.12.19 |
---|---|
[swea] [Java] 5215. 햄버거 다이어트 (0) | 2022.08.11 |
[BOJ][파이썬, 자바]11660 구간 합 구하기5 (0) | 2022.08.03 |
[프로그래머스]체육복, 파이썬(python) (0) | 2022.06.09 |
[swea]1204. 최빈수 구하기, 파이썬(python) (0) | 2022.05.26 |