https://www.acmicpc.net/problem/4396
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
'🔅코딩테스트 공부🔅 > ❗백준' 카테고리의 다른 글
[백준] 20436번 ZOAC 3(python) (1) | 2023.04.17 |
---|---|
[백준] 1244번 스위치 켜고 끄기(python) (0) | 2023.04.15 |
[백준] 2578번 빙고(python) (0) | 2023.04.13 |
[백준] 20546번 🐜 기적의 매매법 🐜(python) (0) | 2023.04.13 |
[백준] 14467번 소가 길을 건너간 이유1(python) (0) | 2023.04.12 |
댓글