게시판
검색 결과: 52
구조상 4중첩 루프가 보통의 해법입니다.
지뢰찾기 코드와 영상처리 코드는 구조가 비슷합니다. 보통 4중첩 루프입니다. 영상처리가 계산량이 많은 이유이기도 하고요.
...
.X.
..*
질문사항이 해결되었는데 글 삭제가 안돼서 우선 그대로 두겠습니다.
삭제 방법을 알려주시면 삭제하도록 하겠습니다.
감사합니다.
-------------------
파이썬 코딩 도장 23.7 심사문제 질문드립니다.
해당 심사문제를 아래와 같이 풀었고, 아나콘다 주피터북에서도 돌려본 결과 코드가 잘 실행됩니다. 그런데, 코딩도장 사이트 상으로는 오답이라고 기록되네요.
비슷한 방식으로 여러번 수정해서 응답을 제출해보았는데도 오답이라고 합니다.
혹시 도움을 주실 수 있을까요?
감사합니다.
문의한 코드는 삭제합니다.
(도장_ 관리자님이 수정함 - 원문 제출일: 2020년 10월 27일, 화요일, 오후 5:08)
IDLE에서 실행하면 코드가 실행되지 않습니다.
IDLE에서 실행되지 않으니 심사 서버에서도 실행되지 않습니다. 심사 서버의 문제가 아닙니다.
/tmp/341958019/main.py:9: SyntaxWarning: list indices must be integers or slices, not tuple; perhaps you missed a comma? taker = [[-1,-1][-1,0][-1,1][1,-1][1,0][1,1][0,-1][0,0][0,1]]항목을 보면 9번 줄에서 SyntaxWarning입니다. 문법 경고입니다.
taker 항목이 틀렸다는 것도 알 수 있습니다. 문제가 되는 코드가 표시되어 있습니다.
list indices must be integers or slices, not tuple; perhaps you missed a comma?indices는 index의 복수형입니다.
메시지를 해석하면
리스트 인덱스는 정수이거나 슬라이서이어야 하고, 튜플이 아닙니다. 그것도 아니라면 당신은 아마도 콤마를 생략했을 겁니다.
라는 뜻입니다.
메시지를 잘 읽으면 문제를 알 수 있고, 해법도 생각할 수 있습니다.
A,B = map(int,input().split())
matrix = []
for i in range(A):
matrix.append(list(input()))
taker = [[-1,-1][-1,0][-1,1][1,-1][1,0][1,1][0,-1][0,0][0,1]]
count=0
for a in range(A):
for b in range(B):
if matrix[a][b] == '*':
print(matrix[a][b], end= '')
elif matrix[a][b] == '.':
for x,y in taker:
if (matrix[a+x][b+y] == '*') and A > a+x >=0 and B> b+y >= 0:
count+=1
print(count, end='')
else:
print(matrix[a][b], end= '')
print()
실행되지 않는 코드라고 나오는데 이유를 모르겠습니다. 조언 부탁드립니다.
2차원 리스트는 다음과 같이 가로*세로 형태로 이루어져 있으며 행(col)과 열(row) 모두 0부터 시작합니다.
p.313
2차원 리스트의 요소에 접근하거나 값을 할당할 때는 리스트 뒤에 [ ](대괄호)를 두 번 사용하며 [ ] 안에 세로(row) 인덱스와 가로(column) 인덱스를 지정해주면 됩니다.
- 리스트[세로인덱스][가로인덱스]
----------------------------------------------------------------------------------------
col, row가 각각 가로, 세로인것도 알고 크기로 셀 때는 col이 세로 크기로, row가 가로 크기로 재는 것도 이해했습니다.
그러나 313쪽 페이지에 2차원 리스트 요소 접근에서 '세로(row) 인덱스와 가로(column) 인덱스' 이 말이 이해가 안됩니다.
만약 이 말대로라면 '리스트[세로인덱스 = row][가로인덱스= col] '을 통해 2차원 리스트 요소에 접근할 수 있다고 했는데 행렬로 그려보니
c0r0 | c0r1 | c0r2 | c0r3 | c0r4 |
---|---|---|---|---|
c1r0 | c1r1 | c1r2 | c1r3 | c1r4 |
c2r0 | c2r1 | c2r2 | c2r3 | c2r4 |
(편의상 c를 행, r을 열로 나타냈습니다.)
만약 c1r2를 꺼내고자 하면
리스트[1][2]라고 해야 할 텐데
책에 적혀있는대로 세로인덱스 = row라면
반대로 리스트[2][1]을 해야 c1r2가 나오지 않을까 생각됩니다.
심사문제 23.7 중에서도
for i in range(row):
for j in range(col):
if matrix[j][i]=='.': # list[col][row]형태
for i in range(row):
for j in range(col):
if matrix[i][j]=='.': # list[row][col]형태
형태가 맞다고 하는데아직 행렬 개념이 잘 잡히지 않아 후자가 왜 맞는 정답인지 잘 모르겠습니다...
결국 list[row][col] 형태가 맞는건가요?
아직도 행렬이 헷갈리네요.....