23.7 질문입니다.
, 김 용현님이 작성col, row = map(int, input().split()) # 행, 열 입력
matrix = [] # (*, .) 지뢰 2차원 리스트 생성
for i in range(col): # 지뢰 2차원 리스트 입력
matrix.append(list(input()))
for i in range(col): # 개수 탐색 시작 - 주인공 설정
for j in range(row):
bucket = 0 # 개수 상자
for x in range(-1, 2): # 주인공 주변 돌아보기
for y in range(-1, 2):
if i+x<0 or j+y<0 or i+x>col or j+y>row: # 리스트 인덱스 벗어날 시 continue
continue
print(i+x, j+y)
if matrix[i+x][j+y] == '*':
bucket += 1
matrix[i][j] = bucket
print(matrix)
-------------------------------------------------------------------------------------------------------------------
if matrix[i+x][j+y] == '*': 에서 자꾸 list out of range 오류가 뜹니다.
print(i+x, j+y)를 넣어서 프린트 했을 때는 매트릭스 range안의 숫자만 나와서 이상합니다.
도와주시면 감사하겠습니다.
Re: 23.7 질문입니다.
, 도장_ 관리자님이 작성이걸 참고해서 Thonny에서 실행해보세요.
한 단계씩 실행할 수도 있고, 오른쪽 위에처럼 변수의 값을 볼 수도 있습니다.
print(i+x, j+y)를 출력했는데, 0 3을 출력했을 때 list index out of range 상태인 것을 알 수 있습니다.
입력은 3 3으로 했습니다. 그러니까 x, y의 인덱스는 각각 0, 1, 2만 접근할 수 있습니다. 3은 접근하면 안 됩니다.
단계별로 접근하면서 [0, 0, '.']인 상태인데 이건 업데이트하지 못했습니다.
(0, 2)가 정확한 좌표일 겁니다. 하지만 코드에서는 (0, 3)에 접근하려고 하고, 이는 범위를 벗어났기 때문에 list index out of range 오류가 발생합니다.
에러 메시지로 line 21로 되어 있는데, matrix[0][3]에 접근하려고 해서 발생하는 문제입니다.
따라서 경계 조건을 좀 더 체크해서 경계를 벗어나지 않게 해야 합니다.