KEEP GOING

백준 4396번 : 지뢰 찾기 본문

code review/implementation

백준 4396번 : 지뢰 찾기

jmHan 2021. 11. 8. 16:31
반응형

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

 

4396번: 지뢰 찾기

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

www.acmicpc.net

 

1. 코드 개선

# 지뢰찾기
n = int(input())
answerBoard = [list(input()) for _ in range(n)]
checkBoard = [list(input()) for _ in range(n)]
result = []
jiroi = False

# 좌표 설정
dx = [1,0,-1,0,1,-1,1,-1]
dy = [0,1,0,-1,-1,1,1,-1]

for i in range(n):
    tmp = []
    for j in range(n):
        cnt = 0
        if checkBoard[i][j] == 'x' and answerBoard[i][j] == '*':
            jiroi = True
        if checkBoard[i][j] == 'x':
            for k in range(8):
                # 양수 범위 지정 안하면 range error
                if n>(i+dx[k])>=0 and n>(j+dy[k])>=0 and answerBoard[i + dx[k]][j + dy[k]] == '*':
                    cnt += 1
            tmp.append(str(cnt))
        else:
            tmp.append('.')
    result.append(tmp)

if jiroi:
   for i in range(n):
        for j in range(n):
            if answerBoard[i][j] == '*':
                result[i][j] = '*'

for data in result:
    print(''.join(data))

2. 기존 풀이

# 지뢰찾기
n = int(input())
answerBoard = [list(input()) for _ in range(n)]
checkBoard = [list(input()) for _ in range(n)]

result = []
jiroi = False

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

for i in range(len(checkBoard)):
    x = i
    tmp = []
    for j in range(n):
        y = j
        cnt = 0
        if checkBoard[i][j] == 'x':
            if answerBoard[i][j] == '*':
                jiroi = True
            for k in range(8):
                # 범위 지정 안하면 range error
                if n>(x + dx[k])>=0 and n>(y+dy[k])>=0 and answerBoard[x + dx[k]][y + dy[k]] == '*':
                    # print(answerBoard[x + dx[k]][y + dy[k]])
                    cnt += 1
            tmp.append(str(cnt))
        else:
            tmp.append('.')
    result.append(tmp)

if jiroi:
    for i in range(n):
        for j in range(n):
            if answerBoard[i][j] == '*':
                result[i][j] = '*'

for data in result:
    print(''.join(data))
반응형
Comments