PangLog
PangLog_k.k
PangLog
전체 방문자
오늘
어제
  • Category (77)
    • 💾기록 (2)
      • 📔기록 (2)
    • 🔧알고리즘 (10)
    • ⚡AI (17)
      • ∃Mathematics (11)
      • AI (5)
      • 논문 (1)
    • 👨‍💻Data Science (2)
    • 📚CS (4)
      • 📡컴퓨터 네트워크 (3)
      • 💾DB (0)
      • ⚙OS (1)
    • ⌨Programming (15)
      • Python (6)
      • Pytorch (3)
      • FastAPI (0)
      • Java (1)
      • Spring (3)
      • Elastic Search (2)
    • 💻 (23)
      • Git (9)
      • Issue sol (2)
      • Linux (2)
      • etc (7)
      • Web (2)
      • Docker (1)
    • 📰칼럼 (4)
      • IT (4)
      • 그 외 (0)
    • Review (0)

블로그 메뉴

  • 홈
  • Github

인기 글

최근 글

태그

  • 탐색적 데이터 분석
  • K-디지털트레이닝 해커톤
  • 11660
  • Java
  • 백준허브 에러
  • 자바
  • 깃허브
  • 알고리즘
  • SWEA
  • cors
  • URL URI 차이
  • BOJ
  • 쥬피터랩
  • 외부단편화
  • cv2
  • 내부단편화
  • Jupyter Lab
  • 5215
  • Python
  • 파이썬
  • 프로그래머스 체육복
  • 프로그래머스
  • 백준허브
  • 옹알이(1)
  • 백준
  • 백준허브 이슈
  • 파이참
  • 인퍼런스
  • pycham
  • inference
hELLO · Designed By 정상우.
PangLog

PangLog_k.k

🔧알고리즘

[BOJ,백준][파이썬] 16918, 봄버맨

2023. 4. 4. 21:12

문제링크

✨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
    '🔧알고리즘' 카테고리의 다른 글
    • [프로그래머스][파이썬] 옹알이(1)
    • [swea] [Java] 5215. 햄버거 다이어트
    • [BOJ][파이썬, 자바]11660 구간 합 구하기5
    • [프로그래머스]체육복, 파이썬(python)
    PangLog
    PangLog

    티스토리툴바