여니의 취준 준비/코딩테스트 (Python)

[Python] n4396 | 지뢰찾기

여니's 2021. 5. 5. 22:02

 

[2022.02.22 다시 품]

 

> deepcopy는 시간이 오래 걸리니까

answerArray에다가 모든 값이 '.'인 값을 넣어서 

리스트를 새로 만들어줌!

 

6번이나 틀린 문제다.. 흡

문제를 제대로 이해하지 못해서 생긴 비극적인 일..

지뢰를 밟았을 때를 따로 조건 처리 해줬어야 했는데

새까맣게 까먹고 있던 조건이었다.

 

지뢰를 밟게 되면?

> 모든 지뢰는 *로 표시를 해야한다.

> 숫자가 적혀있는 부분을 제외한 모든 곳은 .로 변경되어야 한다.

 

n = int(input())
# 상, 상우,우,우하,하,하좌,좌,좌상
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, 1, 1, 1, 0, -1, -1, -1]
bombArray = [list(input()) for _ in range(n)]
mapArray = [list(input()) for _ in range(n)]
answerArray = [["." for _ in range(n)] for _ in range(n)]
button=False
for i in range(n):
    for j in range(n):
        if mapArray[i][j] == ".":
            continue
        if bombArray[i][j] == ".":
            temp = 0
            for k in range(8):
                nx = i + dx[k]
                ny = j + dy[k]
                if 0 <= nx < n and 0 <= ny < n:
                    if bombArray[nx][ny] == "*":
                        temp += 1
            answerArray[i][j] = str(temp)
        else:
           button=True

if button:
    for i in range(n):
        for j in range(n):
            if bombArray[i][j] == "*":
                answerArray[i][j] = "*"
        print(''.join(answerArray[i]))
else:
    for i in range(n):
        print(''.join(answerArray[i]))

 

 

 

from copy import deepcopy

n = int(input())
map1 = [list(input()) for _ in range(n)]
map2 = [list(input()) for _ in range(n)]
answer = deepcopy(map2)

# 상,우,좌,하
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, 1, 1, 1, 0, -1, -1, -1]

temp = False

def boom(array1, array2, answer):
    global temp

    for x in range(n):
        for y in range(n):
            if map2[x][y] == '.':
                continue

            if map2[x][y] == 'x':
                if map1[x][y] == '.':
                    cnt = 0
                    for k in range(8):
                        nx = x + dx[k]
                        ny = y + dy[k]
                        if nx >= 0 and nx < n and ny >= 0 and ny < n:
                            if map1[nx][ny] == '*':
                                cnt += 1
                    answer[x][y] = str(cnt)
                else:
                    temp = True

    if temp:
        return True

    return False


if boom(map1, map2, answer):
    for i in range(n):
        for j in range(n):
            if map1[i][j]=='*':
                answer[i][j]='*'

for i in range(n):
    print(''.join(answer[i]))