🍋 문제링크
https://www.acmicpc.net/problem/16918
🍎 코드 제출 기록 (메모리 및 시간)
메모리 : 196844 KB
시간 : 928 ms
🥝 메모
- 폭탄이 들어있는곳의 문자는 숫자 0이 아니라 대문자 알파벳 O이었다는...
🍓 문제풀이
[ 순서 정리 ]
- 임의의 칸에 폭탄을 설치한다. - 3초
- 처음 1초 동안 아무것도 하지 않는다.
- 다음 1초 동안 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치하고 폭탄의 시간이 0이 된 폭탄은 폭발한다.
- 3번을 반복
[ 풀이순서 ]
- 입력받은 map을 통해 각 폭탄의 시간을 저장하고 있는 배열을 생성한다.
→ 처음에 들어있는 폭탄의 시간은 2로 입력 (처음 1초는 아무일도 하지 않기 때문에) - N-1 초동안 아래의 과정을 반복 (처음 1초는 수행하지 않아도 되기 때문에 N-1)
- 모든 폭탄의 시간을 -1 시킴
- 비어있는 곳에 3초의 시간을 가지는 폭탄을 채움
- 0이 된 폭탄이 있으면 주변 칸까지 0으로 수정폭탄의 시간을 가지고 있는 배열과 폭발이 모두 일어난 후를 저장할 배열을 구분시켜주어야함!
→ deepcopy를 사용하지 않으면 0이 무한대로 퍼지는 문제가 발생하므로
[ 시간별 변화 ]
🍉 Code
import copy
# 입력값을 통해 폭탄의 시간을 가진 배열 채우기
def get_input():
for i in range(R):
tmp = str(input())
for j in range(C):
bomb[i][j] = 0 if tmp[j] == '.' else 2
# 1초 동안 봄버맨은 아무것도 하지 않기 때문에 2를 넣어줌
# 0이면 '.' 1 2 3이면 '0'을 출력
def print_result():
for i in range(R):
for j in range(C):
tmp = '.' if bomb[i][j] == 0 else 'O'
print(tmp, end="")
print()
# 비어있는 칸에 새로운 폭탄을 채우고 있는 칸은 1초 시간이 흐르도록 함
def fill_bomb():
for i in range(R):
for j in range(C):
bomb[i][j] = 3 if bomb[i][j] == 0 else bomb[i][j] - 1
# 0이 된 칸은 주변의 폭탄도 제거
def bomb_explosion(bomb):
bomb2 = copy.deepcopy(bomb)
for i in range(R):
for j in range(C):
if bomb[i][j] == 0:
if 0 <= j-1:
bomb2[i][j-1] = 0
if j+1 < C:
bomb2[i][j+1] = 0
if 0 <= i-1:
bomb2[i-1][j] = 0
if i+1 < R:
bomb2[i+1][j] = 0
return bomb2
R, C, N = map(int, input().split())
bomb = [[0 for _ in range(C)] for _ in range(R)]
if __name__=='__main__':
get_input()
for _ in range(N-1):
fill_bomb()
bomb = bomb_explosion(bomb)
print_result()
반응형
'➰ 취업준비 > 알고리즘 문제풀이' 카테고리의 다른 글
[Python][프로그래머스] level 1 - 문자열 내 마음대로 정렬하기 (0) | 2021.07.08 |
---|---|
[Python][프로그래머스] level 1 - 키패드 누르기 (0) | 2021.06.24 |
[Python][백준][17086] 아기 상어 2 (BFS) (0) | 2021.04.26 |
[C++][백준][17086] 아기 상어 2 (BFS) (0) | 2021.04.26 |
[Python][백준][16931] 겉넓이 구하기 (구현) (0) | 2021.04.26 |