[코딩도장] 23.7 심사문제: 지뢰찾기, 제가 푼 방법

코딩/python|2020. 8. 28. 15:26

저는 이 문제를 해결하기 위해서 지뢰가 아닌 위치(.)를 먼저 찾은 후, 인접한 8개 점들에 지뢰(*)가 있는지를 확인해서 있으면 하나씩 카운트하는 식으로 코드를 구현했습니다. 이때 조심해야하는 것은 8개 점들에 대해 조사할 때 인덱스를 벗어나지 않도록 적절한 조건들을 넣어주는 것입니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
row, col = map(int, input().split())
matrix = []
for i in range(row):
    matrix.append(list(input()))
print()
for i in range(row):
    for j in range(col):
        cnt = 0
        if matrix[i][j] == ".":
            if i != 0 and j != 0
                if matrix[i-1][j-1== "*": cnt += 1
            if i != row-1 and j != col-1:
                if matrix[i+1][j+1== "*": cnt += 1
            if i != 0:
                if matrix[i-1][j] == "*": cnt += 1
            if i != 0 and j != col-1:
                if matrix[i-1][j+1== "*": cnt += 1
            if j != 0:
                if matrix[i][j-1== "*": cnt += 1
            if i != row - 1 and j != 0:
                if matrix[i+1][j-1== "*": cnt += 1
            if j != col -1:
                if matrix[i][j+1== "*": cnt += 1
            if i != row -1:
                if matrix[i+1][j] =="*": cnt += 1
            matrix[i][j] = cnt
            print(matrix[i][j], end="")
        else:
            print(matrix[i][j], end="")
    print()
cs

 

실행결과는 다음과 같습니다. 

 

 

위 코드는 가독성은 좋은 편이지만 좀 더 간결하게 만들 수 있습니다. 다음과 같이 수정해도 동일하게 작동합니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
row, col = map(int, input().split())
matrix = []
for i in range(row):
    matrix.append(list(input()))
print()
for i in range(row):
    for j in range(col):
        cnt = 0
        if matrix[i][j] == ".":
            for y in range(i-1, i+2):
                for x in range(j-1, j+2):
                    if not (y < 0 or x < 0 or y >= row or x >= col):
                        if matrix[y][x] == "*":
                            cnt += 1
            matrix[i][j] = cnt
            print(matrix[i][j], end="")
        else:
            print(matrix[i][j], end="")
    print()
cs

 

30줄의 코드를 19줄의 코드로 줄였습니다. 

 

파이썬 공부하시는데 있어서 어떤 학습자료를 이용할 지 고민하고 계시는 분들은 코딩도장을 이용하시는 것을 강력히 추천드립니다. 독학하는데 있어서 체계적으로 공부하고 점검받기에 아주 좋습니다.