저는 이 문제를 해결하기 위해서 지뢰가 아닌 위치(.)를 먼저 찾은 후, 인접한 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줄의 코드로 줄였습니다.
파이썬 공부하시는데 있어서 어떤 학습자료를 이용할 지 고민하고 계시는 분들은 코딩도장을 이용하시는 것을 강력히 추천드립니다. 독학하는데 있어서 체계적으로 공부하고 점검받기에 아주 좋습니다.
'Dev > python' 카테고리의 다른 글
[python] 파이썬 set 집합 연산자 사용법 (0) | 2020.09.05 |
---|---|
[python] 파이썬 IDLE 주석 처리 단축키(스파이더, 파이참, 코랩, vscode와 비교) (0) | 2020.09.04 |
[python] 딕셔너리에서 특정 값을 가진 키와 값 삭제하기 (0) | 2020.09.03 |
[python] 문자열에 특정 단어가 몇 번 들어가는지 세기 (+스팸 메일 체크), split()과 strip() 활용 (0) | 2020.08.28 |
[python] 숫자 여러 개 한 번에 입력받기, input(), split(), map() 함수 (0) | 2020.08.27 |
[python] 리스트 일부 요소 삭제(del 또는 pop) 및 전체 요소 삭제(clear)하는 방법 (0) | 2020.08.27 |
[python] 현재 시간 출력하기 (+살아온 날 수 계산하기) (0) | 2020.08.26 |
[python] 데이터셋 내 이미지들의 이름이 0000001.bmp, 0000002.bmp,..., 0001000.bmp일 때 순차적으로 읽는 방법 (0) | 2020.08.25 |