파이썬 알고리즘 275번 | [백준 16918번] 봄버맨 - 구현 (단순)

Yunny.Log ·2022년 11월 13일
0

Algorithm

목록 보기
280/318
post-thumbnail

275. 봄버맨

1) 어떤 전략(알고리즘)으로 해결?

  • 구현

2) 코딩 설명

<내 풀이>


import sys

# 네 방향 탐색용
rdis = [-1, 1, 0, 0]
cdis = [0, 0, 1, -1]

def solution(r,c,n,mapp) : 
    
    while n<=time : # 시간이 아직 안됐을 경우에

        if n%2== 0 : # 폭탄 없는 곳에도 폭탄 설치해주기 
            # 2초마다 한번씩 하는 것, 
            # 2초, 4초, 6초 마다 작업 
            # 수행해주니깐 짝수일 때만 아래 작업 수행
            for i in range(r) :
                for j in range(c) :
                    if type(mapp[i][j])==str and mapp[i][j]=="." :
                        mapp[i][j] = 3
        # 매번 폭탄 찾아서
        # (1) 0초면 이제 터지게 해주고
        # (2) 0초 아니면 시간 하나 삭감
        for i in range(r) :
            for j in range(c) :

                if type(mapp[i][j])==int :
                    if mapp[i][j]==0 :  # (1) 폭탄이 터질 타임
                        for k in range(4) : # 주변 돌아봐주고 
                            if 0<=i+rdis[k]<r and 0<=j+cdis[k]<c and type(mapp[i+rdis[k]][j+cdis[k]]) == int and mapp[i+rdis[k]][j+cdis[k]]!=0 :
                                mapp[i+rdis[k]][j+cdis[k]] = "."
                        mapp[i][j]="." # 나 자신도 터져주기 
        
        # (2) 나머지 폭탄들 시간 줄여주기 (1번을 마무리하고 해주기)
        for i in range(r) :
            for j in range(c) :
                if type(mapp[i][j])==int :
                    if mapp[i][j]>0 :
                        mapp[i][j]-=1

        n+=1
### main
r,c,time = map(int, sys.stdin.readline().split())
mapp = []
for i in range(r) :
        mapp.append(list(sys.stdin.readline().rstrip()))

for i in range(r) :
    for j in range(c) :
        if mapp[i][j]=="O" :
            mapp[i][j]=2

solution(r,c,1,mapp) # 1초 동안 암것도 안해서 1초부터 넣어줌

for m in mapp:
    for mm in m :
        if type(mm)==int : 
            print("O", end= "")
        else : print(mm, end= "")
    print()    
    

<반성 점>

  • 문제 조건을 꼼꼼히 안 읽었었다! 대충 살면 몸이 고생하네~

<배운 점>

  • 이제부터 프로그래머스 방식으로 백준을 풀기로 했다 ! 함수로 나눠서,,,

0개의 댓글