코딩 도장 지뢰 찾기 예제 관련 코드 검토 부탁드립니다 ㅜ

표준 입력으로 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 오후

목록으로