시작이 반

[백준] 4396번번 (python 파이썬) 본문

알고리즘/백준

[백준] 4396번번 (python 파이썬)

G_Gi 2021. 3. 29. 18:58
SMALL

https://www.acmicpc.net/problem/4396

구현문제이다.

 

열린 칸 주변에 지뢰가 몇개 있는지 확인(해당 위치에서 8방향) 하여 숫자를 출력한다.

만약 연린 칸에 지뢰가 있다면 모든 지뢰 또한 출력한다.

 

이중 반복문을 이용하여 구현하였다.

dx, dy를 사용하여 좌표를 구하였음

 

n = int(input())

graph1 = list(input() for _ in range(n))
graph2 = list(input() for _ in range(n))
answer = [['.'] * n for _ in range(n)]

dx = [-1, -1, -1, 0, 1, 1, 1, 0]
dy = [-1, 0, 1, 1, 1, 0, -1, -1]

def findBoom():
    for i in range(n):
        for j in range(n):

            if graph1[i][j] == '.' and graph2[i][j] == 'x':
                boom = 0
                for k in range(8):
                    nx = i + dx[k]
                    ny = j + dy[k]

                    if nx < 0 or nx >= n or ny < 0 or ny >= n: # 리스트 좌표 벗어났을때
                        continue

                    if graph1[nx][ny] == '*':
                        boom += 1
                answer[i][j] = boom

            if graph1[i][j] == '*' and graph2[i][j] == 'x':
                makeFail()


def makeFail():
    global answer
    for i in range(n):
        for j in range(n):
            if graph1[i][j] == '*':
                answer[i][j] = '*'


findBoom()
for i in range(n):
    for j in range(n):
        print(answer[i][j], end='')
    print()

LIST