코테 대비 python/백준
4396 지뢰찾기
ylab
2023. 3. 13. 16:49
https://www.acmicpc.net/problem/4396
4396번: 지뢰 찾기
지뢰찾기는 n × n 격자 위에서 이루어진다. m개의 지뢰가 각각 서로 다른 격자 위에 숨겨져 있다. 플레이어는 격자판의 어느 지점을 건드리기를 계속한다. 지뢰가 있는 지점을 건드리면 플레이어
www.acmicpc.net
#인접한 8개의 칸에 지뢰가 몇개 있었는지 알려주는 0~8사이의 숫자가 나타남
#n이 10이하이므로 브르투포스 가능할 것으로 보임
#따라서 주어진 조건을 만족하는 깡구현
#맨처음 n개는 지뢰위치 그다음 n개는 연것들의 위치
n = int(input())
mine = [input().rstrip() for _ in range(n)]
open = [input().rstrip() for _ in range(n)]
result = [[0]*n for _ in range(n)]
#print(mine)
#상하좌우 대각선
dx = [-1,1,0,0,-1,-1,1,1]
dy = [0,0,-1,1,-1,1,1,-1]
#만약 지뢰라면?? 지뢰의 위치를 미리 받자??
loc = []
for i in range(n):
for j in range(n):
if mine[i][j] =='*':
loc.append((i,j))
def count_mine(x,y):
cnt=0
for i in range(8):
nx = x+dx[i]
ny = y+dy[i]
#범위안에 있다면, 지뢰라면?
if 0<=nx<n and 0<=ny<n :
if mine[nx][ny]=='*':
cnt+=1
result[x][y]=cnt
flag=0
for i in range(n):
for j in range(n):
#만약 열었다면
if open[i][j]=='x':
#열었는데 지뢰아니라면
if mine[i][j] =='.':
#print(1)
count_mine(i,j)
#지뢰면 flag =1
elif mine[i][j] =='*':
flag=1
#안열었다면
elif open[i][j]=='.':
result[i][j]='.'
#마지막에 다 꼬이나보다 그러면 flag주자
if flag==1:
for k in loc:
a,b=k
result[a][b]='*'
for h in result:
for l in h:
print(l,end='')
print()