본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 4396번 지뢰 찾기(python)

by 윤무무 2023. 4. 14.

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

 

4396번: 지뢰 찾기

지뢰찾기는 n × n 격자 위에서 이루어진다. m개의 지뢰가 각각 서로 다른 격자 위에 숨겨져 있다. 플레이어는 격자판의 어느 지점을 건드리기를 계속한다. 지뢰가 있는 지점을 건드리면 플레이어

www.acmicpc.net

 

1. 난이도 실버4

 

2. 내가 작성한 코드

지뢰가 있는 칸이 열렸다면 지뢰가 있는 모든 칸이 별표(*)로 표시되어야 한다. 다른 모든 지점은 온점(.)이어야 한다.

 

라는 조건이 있어서 "이미 열린 칸"을 포함해서 모두 온점으로 print했더니 틀렸다.

 

읭? 이라는 생각과 함께 질문게시판을 찾아보니  x에 대해서는(=이미 열린 칸에 대해서) 지뢰의 개수를 표시해줘야 한다고,,

 

암튼 수정해서 맞출 수 있었다 o(* ̄▽ ̄*)ブ

 

지뢰 게임 안 해봐서 그런가 ,, 18퍼센트에서 계속 틀린다면 이 글 참고해서 수정해보세요!

 

import sys

input = sys.stdin.readline

n = int(input().rstrip())

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

for i in range(n):
    for j in range(n):
        if location[i][j] == "x" and maps[i][j] == "*":
            check = False #폭탄을 만났을 경우 표시
        elif location[i][j] == "x" and maps[i][j] == ".":
            maps[i][j] = location[i][j]

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

if check == False: #폭탄을 만날 경우
    for i in range(n):
        for j in range(n):
            if maps[i][j] == "x":
                cnt = 0
                for k in range(8):
                    nx = i + dx[k]
                    ny = j + dy[k]
                    if nx <0 or ny<0 or nx>=n or ny>=n:
                        continue
                    if maps[nx][ny] == "*":
                        cnt+=1
                maps[i][j] = cnt
            print(maps[i][j],end="")
        print()

else: #폭탄을 만나지 않은 경우
    for i in range(n):
        for j in range(n):
            if maps[i][j] == "x":
                cnt = 0
                for k in range(8):
                    nx = i + dx[k]
                    ny = j + dy[k]
                    if nx <0 or ny<0 or nx>=n or ny>=n:
                        continue
                    if maps[nx][ny] == "*":
                        cnt+=1
                maps[i][j] = cnt

    for i in range(n):
        for j in range(n):
            if maps[i][j] == "*":
                maps[i][j] = "."
            print(maps[i][j],end="")
        print()

 

나는 지뢰가 열렸을 경우 check = False로 표시해준 후

 

False(지뢰가 열린 경우)면 지뢰를 그대로 출력 

 

True(지뢰가 열리지 않은 경우)면 지뢰를 온점으로 바꿔서 출력

 

할 수 있게 나눴는다.

 

중복된 코드를 줄이고 싶으면 아래 링크를 참고하면된다.

 

https://ywtechit.tistory.com/124

 

[ 파이썬(python) ] 백준 4396 - 지뢰

📍 백준 4396 - 지뢰 백준 4396 - 지뢰 ⚡️ 나의 풀이 상당히 고생한 문제다. 이 문제를 맞히기 위해 정답을 얼마나 제출했는지 모르겠다. 난이도가 실버 5 였기 때문에 쉽게 풀 줄 알았는데 큰 코

ywtechit.tistory.com

댓글