728x90
정답
노가다로 풀이한 코드
col, row = map(int, input().split())
matrix = []
for i in range(row):
matrix.append(list(input()))
output = []
for i in range(len(matrix)):
output.append([])
for j in range(len(matrix[i])):
this = matrix[i][j]
if this == '*':
output[i].append(this)
continue
else:
data = 0
if j < len(matrix[i])-1 and matrix[i][j+1] == '*':
data += 1
if j != 0 and matrix[i][j-1] == '*':
data += 1
if i < len(matrix)-1 and j < len(matrix[i])-1 and matrix[i+1][j+1] == '*':
data += 1
if i < len(matrix)-1 and matrix[i+1][j] == '*':
data += 1
if j != 0 and i < len(matrix)-1 and matrix[i+1][j-1] == '*':
data += 1
if i != 0 and j < len(matrix[i])-1 and matrix[i-1][j+1] == '*':
data += 1
if i != 0 and matrix[i-1][j] == '*':
data += 1
if i != 0 and j != 0 and matrix[i-1][j-1] == '*':
data += 1
output[i].append(data)
for i in range(len(output)):
for j in range(len(output[i])):
print(output[i][j], end='')
print()
심사문제 힌트를 이용해서 풀이한 코드
col, row = map(int, input().split())
matrix = []
for i in range(row):
matrix.append(list(input()))
for i in range(row):
for j in range(col):
if matrix[i][j] == '*':
continue
else:
matrix[i][j] = 0 # 0을 넣은 뒤에는 요소 주변 8개를 탐색하면서 *이면 요소를 1개씩 증가
# range에서 생성한 숫자의 마지막 값은 끝나는 값보다 1 작은데
# 탐색을 위해서 한 칸 아래까지 더 반복해야 하므로 i + 1이 아닌 i + 2가 되어야 함
for y in range(i - 1, i + 2): # 한 칸 위부터 한 칸 아래까지 반복
for x in range(j -1, j + 2): # 한 칸 앞(왼쪽)부터 한 칸 뒤(오른쪽)까지 반복
if y < 0 or x < 0 or y >= row or x >= col: # 리스트의 범위를 벗어나면 건너뛰기
continue
elif matrix[y][x] == '*':
matrix[i][j] += 1
for i in range(row):
for j in range(col):
print(matrix[i][j], end='')
print()
# for i in matrix:
# for j in i:
# print(j, end='')
# print()
728x90
'CodingTest' 카테고리의 다른 글
[파이썬 코딩 도장] 24.6 심사문제: 높은 가격순으로 출력하기 (0) | 2020.11.27 |
---|---|
[파이썬 코딩 도장] 24.5 심사문제: 특정 단어 개수 세기 (0) | 2020.11.27 |
[파이썬 코딩 도장] 22.10 심사문제: 2의 거듭제곱 리스트 생성하기 (0) | 2020.11.19 |
[파이썬 코딩 도장] 21.6 심사문제: 별 그리기 (0) | 2020.11.19 |
[파이썬 코딩 도장] 20.8 심사문제: 5와 7의 배수, 공배수 처리하기 (0) | 2020.11.15 |
댓글