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

 

4396번: 지뢰 찾기

첫 번째 줄에는 10보다 작거나 같은 양의 정수 n이 입력된다. 다음 n개의 줄은 지뢰의 위치를 나타낸다. 각각의 줄은 n개의 문자를 사용하여 한 행을 나타낸다. 온점(.)은 지뢰가 없는 지점이며 별

www.acmicpc.net

 

문제를 보고 반복문으로 지뢰를 탐색하면 되겠지라고 생각했는데,

문제를 잘 읽어보니 폭탄을 열었을 때 조건을 추가해주지 않아서 틀렸었다.

폭탄이 터졌을 때는 한 번만 필요하므로, flag 변수를 세워서 한 번만 실행되도록 했다.

 

import sys

input = sys.stdin.readline

n = int(input())
dx = [1,1,1,0,0,-1,-1,-1]
dy = [1,0,-1,1,-1,1,0,-1]

real = [list(input().rstrip()) for _ in range(n)]
check = [list(input().rstrip()) for _ in range(n)]
flag = True

def change(x,y):        
    cnt = 0
    
    for i in range(8):
        a = x + dx[i]
        b = y + dy[i]

        if 0<=a <n and 0<=b<n:
            if real[a][b] == '*':
                cnt += 1

    return str(cnt)
#지뢰가 있는 칸을 열었을 때
def bomb():
    for i in range(n):
        for j in range(n):
            if real[i][j] == "*":
                check[i][j] = "*"
        
for i in range(n):
    for j in range(n):
        if check[i][j] == 'x':
            if real[i][j] == ".":
                check[i][j] = change(i,j)
            elif real[i][j] == "*" and flag:
                bomb()
                flag==False

for i in check:
    print("".join(i))

+ Recent posts