코딩 도장 지뢰 찾기 예제 관련 코드 검토 부탁드립니다 ㅜ
표준 입력으로 2차원 리스트의 가로(col)와 세로(row)가 입력되고 그 다음 줄부터 리스트의 요소로 들어갈 문자가 입력됩니다. 이때 2차원 리스트 안에서 *는 지뢰이고 .은 지뢰가 아닙니다. 지뢰가 아닌 요소에는 인접한 지뢰의 개수를 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다).
여러 줄을 입력 받으려면 다음과 같이 for 반복문에서 input을 호출한 뒤 append로 각 줄을 추가하면 됩니다(list 안에 문자열을 넣으면 문자열이 문자 리스트로 변환됩니다).
matrix = []
for i in range(row):
matrix.append(list(input()))
이 문제는 지금까지 심사문제 중에서 가장 어렵습니다. 처음 풀어보는 경우 대략 두 시간은 걸립니다. 시간을 두고 천천히 고민해서 풀어보세요. 지금까지 학습한 내용을 모두 동원해야 풀 수 있으며 막힐 때는 지금까지 학습한 내용을 다시 복습하면서 힌트를 찾아보세요.
다음과 같은 문제에 대한 정답으로 제가 실행해 본 코드입니다.
Python
row,col=map(int,input('가로와 세로를 띄어쓰기 단위로 작성').split())
matrix=[]
for i in range(row):
matrix.append(list(input('{0}열에 들어갈 요소'.format(i+1)))) # 매트릭스 생성
for i in range(row):
for j in range(col):
cnt=0
if matrix[i][j]=='*':
matrix[i][j]='*'
print(matrix[i][j],end='')
continue
if matrix[i][j]=='.':
if 0<i<row-1 and 0<j<col-1:
for y in range(i-1,i+2):
for x in range(j-1,j+2):
if matrix[i][j]=='.':
continue
if matrix[i][j]=='*':
cnt+=1
if 0<i<row-1 and j==0:
for y in range(i-1,i+2):
for x in range(j,j+2):
if matrix[i][j]=='.':
continue
if matrix[i][j]=='*':
cnt+=1
if i==0 and 0<j<col-1:
for y in range(i,i+2):
for x in range(j-1,j+2):
if matrix[i][j]=='.':
continue
if matrix[i][j]=='*':
cnt+=1
if 0<i<row-1 and j==col-1:
for y in range(i-1,i+2):
for x in range(j-1,j+1):
if matrix[i][j]=='.':
continue
if matrix[i][j]=='*':
cnt+=1
if i==row-1 and 0<j<col-1:
for y in range(i-1,i+1):
for x in range(j-1,j+2):
if matrix[i][j]=='.':
continue
if matrix[i][j]=='*':
cnt+=1
matrix[i][j]=cnt
print(matrix[i][j],end='')
print()
어느 부분에서 잘못해서 결과가 나오지 않는 것일까요? ㅠㅜ 고수님들의 검토 부탁드립니다. ㅠㅜ
eventhough2000 님 325
M 2022년 2월 11일 3:56 오후