bskyvision RSS 태그 관리 글쓰기 방명록
2020-08-28 15:26:34
728x90

저는 이 문제를 해결하기 위해서 지뢰가 아닌 위치(.)를 먼저 찾은 후, 인접한 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줄의 코드로 줄였습니다. 

 

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

댓글

방문해주신 모든 분들을 환영합니다.

* 글을 읽던 중에 궁금했던 부분은 질문해주세요.

* 칭찬, 지적, 의문, 격려, 감사표현 등을 남겨주세요.

* 최대한 답변 드리도록 노력하겠습니다.

* 욕설과 광고를 담은 댓글은 가차없이 삭제합니다.


  1. 23.7 질문@2021.06.04 17:26 ~$ cnt가 의미하는것은 무엇인가요? [댓글주소]  [수정/삭제]  [답글작성]
guest@이름 ~$
guest@패스워드 ~$
guest@홈페이지주소작성 ~$

guest@댓글작성 ~$




bskyvision. Designed by bskyvision.