즐거운 PS 👩‍💻🥰

[백준-파이썬] 16919: 봄버맨 2

dalin❤️ 2022. 3. 8. 22:02

문제 풀러 가기!

ㅠㅠ 많이 틀리다가 맞았다...

풀이

1초) 처음 설치된 것과 같음

2초) 모든 칸에 폭탄 설치됨.

3초) 처음에 설치되었던 폭탄이 폭발함.

4초) 모든 칸에 폭탄이 설치됨.

5초) 2초 대에 설치되었던 폭탄들 중 남은 폭탄들이 폭발함.

6초) 모든 칸에 폭탄이 설치됨.

7초) 4초 대에 설치되었던 폭탄들 중 남은 폭탄들이 폭발함.

예제의 그림을 보면 이해할 수 있을 것이다!

이렇게 해서 짝수 초일 때는 무조건 모든 칸에 폭탄이 설치되어있다는 걸 알 수 있다.

또 홀수 초의 경우에도 4초 주기로 돌아가는 걸 볼 수 있다. 그래서 %4를 이용해서 경우를 구해서 풀었다.

N==1일 때 경우는 따로 빼둬야 한다. 그건 이 게시물을 보고 알았다..

틀렸던 부분....

진짜 모르겠어서, 친구한테 물어봤고, 친구가 알려줬다...
N==1일 때 부분 때문에 틀렸던 것이었다.

if N == 1:  # 그대로 출력
    for i in range(R):
        print(*board[i])

이렇게 *board[i] 을 하니까, 중간 중간에 공백이 출력되었다.

그 부분을 바꿔주니 맞았다..

코드 👩‍💻

import sys

input = sys.stdin.readline

R, C, N = map(int, input().split())
board = list(list(input().rstrip()) for _ in range(R))
dist = [(0, -1), (0, 1), (1, 0), (-1, 0)]

if N == 1:  # 그대로 출력
    for i in range(R):
        for j in range(C):
            print(board[i][j], end='')
        print()

# 전체 폭탄 있을 때
elif N % 2 == 0:
    for i in range(R):
        for j in range(C):
            print('O', end='')
        print()

elif N % 4 == 3:
    # 초기 폭탄 폭발할 때 결과
    tmp_board = [['O'] * C for _ in range(R)]
    for i in range(R):
        for j in range(C):
            if board[i][j] == 'O':
                tmp_board[i][j] = '.'
                # 4방향에 폭탄 있으면 터지기
                for k in range(4):
                    ni = i + dist[k][0]
                    nj = j + dist[k][1]
                    if 0 <= ni < R and 0 <= nj < C:
                        tmp_board[ni][nj] = '.'
    for i in range(R):
        for j in range(C):
            print(tmp_board[i][j], end='')
        print()

elif N % 4 == 1:  # 나중에 설치된 폭탄 폭발
    # # 한 번 더 진행된 결과
    tmp_board = [['O'] * C for _ in range(R)]
    for i in range(R):
        for j in range(C):
            if board[i][j] == 'O':
                tmp_board[i][j] = '.'
                # 4방향에 폭탄 있으면 터지기
                for k in range(4):
                    ni = i + dist[k][0]
                    nj = j + dist[k][1]
                    if 0 <= ni < R and 0 <= nj < C:
                        tmp_board[ni][nj] = '.'

    board = tmp_board
    tmp_board = [['O'] * C for _ in range(R)]

    for i in range(R):
        for j in range(C):
            if board[i][j] == 'O':
                tmp_board[i][j] = '.'
                # 4방향에 폭탄 있으면 터지기
                for k in range(4):
                    ni = i + dist[k][0]
                    nj = j + dist[k][1]
                    if 0 <= ni < R and 0 <= nj < C:
                        tmp_board[ni][nj] = '.'

    for i in range(R):
        for j in range(C):
            print(tmp_board[i][j], end='')
        print()
728x90