해당 문제를 확인하시고 싶으면 아래 링크를 통해 확인해주세요!
https://www.acmicpc.net/problem/4396
이번 문제는...... 그냥 설명 안하겠습니다...
일단 제가 최종적으로 작성한 코드를 올려보면..!
"""
백준 4396번: 지뢰 찾기
https://www.acmicpc.net/problem/4396
"""
N = int(input()) # N개의 줄
mine = [list(input().rstrip()) for _ in range(N)] # 지뢰의 위치
table = [list(input().rstrip()) for _ in range(N)] # 열린칸에는 주변에 지뢰가 몇개있는지
findMine = False # 마인을 확인했는지에 대한 변수
def mine_count(mine, x, y):
# 상하좌우 + 북서/북동/남서/남동
dx = [-1, 1, 0, 0, -1, -1, 1, 1]
dy = [0, 0, -1, 1, -1, 1, -1, 1]
count = 0
for i in range(8):
# x,y좌표 이동
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= N or ny < 0 or ny >= N:
continue
else:
if mine[nx][ny] == '*':
count += 1
return count
for i in range(N):
for j in range(N):
if table[i][j] == 'x': # 해당 칸이 열려있는 상태
if mine[i][j] == '*': # 그 칸에 지뢰가 있음
findMine = True # 열려있는 상태에서 마인 찾았다고 표시
continue
mc = mine_count(mine, i, j)
table[i][j] = str(mc)
# 열린 상태에서 지뢰를 본적이 있음 -> mine을 순회하면서 지뢰인 부분의 좌표를 기억해서 table에 기록
if findMine == True:
for a in range(N):
for b in range(N):
if mine[a][b] == '*':
table[a][b] = '*'
# 출력하는 부분
for r in range(N):
print(''.join(table[r]))
난 이번 문제를 풀면서... (삽질의 흔적..)
진짜 자신없었던 알고리즘과 코딩테스트가 오늘따라 생각보다 잘풀리네? 하면서 뭔가 자신감이 붙었는데 아무리 봐도봐도 잘 돌아갈거 같은 내 코드가 계속 틀렸다고 하는 것이다..!
왜 틀렸냐고?????
바로 위의 코드에서 mine_count
함수에서..
if nx < 0 or nx >= N or ny < 0 or ny >= N:
continue
else:
if mine[nx][ny] == '*':
count += 1
저기 보이는 or N 이부분을 내가 N이 아니라 8이라고 하드코딩을 해놨던 것이와요......
결론) 앞으로는 하드코딩 진짜 절대절대절대절대저어어어얼대 하지맙시다.
개같은 하루.