GraphTraversal_봄버맨(16918)

Eugenius1st·2023년 3월 24일
0

Algorithm_Baekjoon

목록 보기
157/158
post-thumbnail

문제

풀이

    1. checkBomb() 만들어 폭탄 위치 값을 queue에 담음
    1. 모든 위치에 폭탄 설치 plantBomb()
    1. queue 폭탄 폭파 상우좌하 폭탄 폭발 & checkBomb queue에 담음

코드

from collections import deque
import sys

# 1. checkBomb, queue에 담음
# 2. 폭탄 설치 plantBomb
# 2. queue 폭탄 폭파 상우좌하 폭탄 폭발 & checkBomb queue에 담음
def BFS(K):
    dy = [-1, 1, 0, 0]
    dx = [0, 0, -1, 1]
    cnt = 1
    while cnt != K:
        cnt += 1
        if cnt % 2 == 0:
            queue = deque(checkBomb(board))
            plantBomb(board)
        elif cnt % 2 == 1:
            if len(queue) == 0:
                queue = deque(checkBomb(board))
            while queue:
                y, x = queue.popleft()
                board[y][x] = '.'
                if 0 <= y - 1:
                    board[y - 1][x] = '.'
                if 0 <= x - 1:
                    board[y][x - 1] = '.'
                if y + 1 < N:
                    board[y + 1][x] = '.'
                if x + 1 < M:
                    board[y][x + 1] = '.'

def checkBomb(board):
    bombs = []
    for i in range(N):
        for j in range(M):
            if board[i][j] == "O":
                bombs.append((i, j))
    return bombs

def plantBomb(board):
    for i in range(N):
        board[i] = ["O"] * M

if __name__ == "__main__":
    N, M, K = map(int,input().split())
    board = []
    for i in range(N):
        board.append(list(sys.stdin.readline().rstrip()))
        # string 은 끝에 \n있어서 rstrip로 읽어준다
    BFS(K)
    for i in range(N):
        for j in range(M):
            print(board[i][j], end="")
        print()

느낀점

  • 빨리 풀었는데
  • 왜인지 계속 틀리더라
  • 그 이유는 마지막에 print 방식에 있었다..

    이렇게 되어야 하는 걸

    이러고 있었으니 당연히..;;

정말 나의 섬세하지 못함에 매번 놀란다.
이런 부분에서 시간 줄이는걸 만들면 정말 안되는데,
늘 예상치 못한 기발한? 삽질을 하는 내게 놀라울 다름이다.
제발.. 눈을 떠라 눈을떠라!!

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글