풀이 방법
폭탄을 설치할 때, 현재 몇 초인지도 같이 저장한다
그리고 폭탄을 터트릴 때 같이 저장했던 시간이 3초 뒤라면 터트린다
# pypy 제출
def fill(num):
for i in range(R):
for j in range(C):
if Map[i][j][0] == '.':
Map[i][j][0], Map[i][j][1] = 'O', num
dx, dy = [0, -1, 0, 1, 0], [0, 0, -1, 0, 1]
def boom(num):
lst = []
for i in range(R):
for j in range(C):
if Map[i][j][0] == 'O' and num == Map[i][j][1] + 3:
for k in range(5):
if 0 <= i+dx[k] < R and 0 <= j+dy[k] < C:
lst.append([i+dx[k], j+dy[k]])
for x, y in lst:
Map[x][y][0], Map[x][y][1] = '.', -9
def sol(num):
if num > N:
for i in range(R):
temp = ''
for j in range(C):
temp += Map[i][j][0]
print(temp)
return
if num % 2 == 0:
fill(num)
sol(num + 1)
else:
boom(num)
sol(num + 1)
R, C, N = map(int, input().split(' '))
Map = []
for i in range(R):
temp = []
for j in input():
if j == 'O':
temp.append(['O', 0])
else:
temp.append(['.', -9])
Map.append(temp)
sol(2)
다른 풀이
이전 배열, 새로운 배열을 계속 갱신해줌
이전 배열은 폭탄으로 파괴할 때 이용하고, 새로운 배열은 무조건 전체가 O로 채워진다
R, C, N = map(int, input().split())
A, old = [list(input()) for _ in range(R)], []
dx, dy = [0, 1, 0, -1], [1, 0, -1, 0]
def full():
return [['O' for _ in range(C)] for _ in range(R)]
def bomb(A, old):
for i in range(R):
for j in range(C):
if old[i][j] == '.' :
continue
A[i][j] = '.'
for x in range(4):
ii, jj = i + dx[x], j + dy[x]
if not (0 <= ii < R and 0 <= jj < C) :
continue
A[ii][jj] = '.'
return A
def tictoc(t):
global A, old
if t%2:
A, old = bomb(A, old), A[:]
else:
A, old = full(), A[:]
for i in range(N-1):
tictoc(i)
print('\n'.join([''.join(r) for r in A]))
'알고리즘 > 백준 (Pyhthon)' 카테고리의 다른 글
[알고리즘] 백준 16197 두 동전 / 파이썬 (0) | 2020.09.17 |
---|---|
[알고리즘] 백준 15653 구슬 탈출 4 / 파이썬 (0) | 2020.09.17 |
[알고리즘] 백준 17070 파이프 옮기기 1 / 파이썬 (0) | 2020.09.15 |
[알고리즘] 백준 14499 주사위 굴리기 / 파이썬 (0) | 2020.09.15 |
[알고리즘] 백준 16500 문자열 판별 / python (0) | 2020.09.15 |