[백준] 16918번 봄버맨 _ Python

2023. 11. 26. 14:10·Algorithms/Graph

[초기 접근 방법]

1초 - 초기 상태
2초 - 폭탄이 설치되어 있지 않은 모든 칸 폭탄 설치
3초 - '초기 폭탄'의 인접 지역 펑!
4초 - 폭탄이 설치되어 있지 않은 모든 칸 폭탄 설치
5초 - 2초에 설치된 폭탄 펑!
6초 - 폭탄이 설치되어 있지 않은 모든 칸 폭탄 설치
7초 - 4초에 설치된 폭탄 펑!

 

 

 

[생각]

홀수∙짝수 시간에 대한 규칙을 찾고, 폭탄을 구분해서 어떻게 터트릴까 고민했던 문제

왜 이렇게 오래 걸렸을까?

→ 머리로만 생각하지말고, 직접 메모로 기록하면서 반복되는 규칙을 찾자

 

 

 

[코드]

# 풀이 시간 : 1시간 30분
# 시간복잡도 : O((N/2) * (5B + RC))
    # N회 반복
    # 홀수 : bfs 폭탄 터지기 (5개 간선, 폭탄 개수 B)
    # 짝수 : 모든 칸 폭탄 설치 (R행, C열)
# 공간복잡도 : O(RC)
# 참고 : -

import sys
from collections import deque
input = sys.stdin.readline

# row, col, N초가 지난 후
R, C, N = map(int, input().split())

# 띄어쓰기 없는 입력값, 2차원 배열에 저장
lst = []
for i in range(R):
    sen = []
    for s in input():
        sen.append(s)
    lst.append(sen)

bombs = deque() # 터트릴 폭탄을 저장할 큐

time = 1
while True:
    # N초가 지났으면(N초까지의 행동이 끝났으면) 격자판 출력
    if time == N+1:
        for row in lst:
            for x in row:
                print(x, end="")
        break

    if time == 1:
        time += 1
        continue

    # 1초를 제외한, 홀수 초에 폭탄이 터진다.
    if time % 2 == 1:
        # 펑 터트리기
        visited = [[False] * C for _ in range(R)]
        dx = [0, 0, 0, 1, -1]
        dy = [0, 1, -1, 0, 0]

        while bombs:
            x, y = bombs.popleft()

            for i in range(5):
                nx = x + dx[i]
                ny = y + dy[i]

                if (0<=nx<R and 0<=ny<C) and (not visited[nx][ny]):
                    visited[nx][ny] = True
                    lst[nx][ny] = '.'

    # 모든 지역 폭탄 설치
    elif time % 2 == 0:
        # 폭탄을 설치하기 이전에, 현재(다음에 터트릴) 폭탄 위치 저장하기
        for i in range(R):
            for j in range(C):
                if lst[i][j] == 'O':
                    bombs.append((i, j))
                lst[i][j] = 'O'

    # 째깍째깍
    time += 1

 

 

저작자표시 (새창열림)

'Algorithm > Graph' 카테고리의 다른 글

[백준] 11559번 Puyo Puyo _ Python  (0) 2024.02.01
[백준] 1325번 효율적인 해킹 _ Python  (0) 2023.11.28
[백준] 1600번 말이 되고픈 원숭이 _ Python  (0) 2023.11.27
[백준] 5547번 일루미네이션 _ Python  (0) 2023.11.27
[백준] 2412번 암벽등반 _ Python  (1) 2023.11.14
'Algorithms/Graph' 카테고리의 다른 글
  • [백준] 1325번 효율적인 해킹 _ Python
  • [백준] 1600번 말이 되고픈 원숭이 _ Python
  • [백준] 5547번 일루미네이션 _ Python
  • [백준] 2412번 암벽등반 _ Python
wch_t
wch_t
  • wch_t
    끄적끄적(TIL)
    wch_t
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (170)
      • Architecture (0)
      • Algorithm (67)
        • Math (5)
        • Simulation (1)
        • Data Structure (4)
        • DP (7)
        • Brute Fource (10)
        • Binary Search (6)
        • Greedy (2)
        • Graph (11)
        • Mst (1)
        • Shortest path (10)
        • Two Pointer (1)
        • Tsp (3)
        • Union Find (2)
        • Mitm (1)
      • CS (2)
        • 데이터베이스 (5)
        • 네트워크 (5)
      • DB (6)
      • DevOps (17)
        • AWS (9)
        • Docker (1)
        • CI-CD (5)
      • Error (1)
      • Project (0)
        • kotrip (0)
      • Spring (59)
        • 끄적끄적 (5)
        • 기본 (9)
        • MVC 1 (7)
        • MVC 2 (11)
        • ORM (8)
        • JPA 1 (7)
        • JPA 2 (5)
        • Spring Data Jpa (7)
      • Test (2)
      • TIL (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Merge
    apache poi
    Sxssf
    form_post
    Jenkins
    spring-cloud-starter-bootstrap
    docker: not found
    docker
    백준 3015 파이썬
    애플
    scope
    spring-cloud-starter-aws-secrets-manager-config
    response_mode
    백준 17289 파이썬
    백준 17299 파이썬
    aws secrets manager
    view algorithm
    TempTable
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
wch_t
[백준] 16918번 봄버맨 _ Python
상단으로

티스토리툴바