게시판

검색 결과: 52

 

구조상 4중첩 루프가 보통의 해법입니다.

지뢰찾기 코드와 영상처리 코드는 구조가 비슷합니다. 보통 4중첩 루프입니다. 영상처리가 계산량이 많은 이유이기도 하고요.


 
3 3
을 입력하고
.**
을 입력하는 단계에서 문제가 생겼습니다.
따라서 입력 단계에 문제가 있을 겁니다.
에러의 마지막을 보면
IndexError: list index out of range입니다.
리스트에 있는 원소 개수를 벗어난 인덱스를 지정했다는 뜻입니다.
리스트에 3개의 원소가 있다면 my_list[0], [1], [2]까지 가능할 것인데, 코드 내부에서 my_list[3]과 같은 접근이 있다는 뜻입니다.

어려우면 표시만 해두고 다음 단계로 넘어가도 됩니다.
나중에 돌아와서 다시 시도해보세요.

, 성 현빈님이 작성
 

제가 작성한 코드입니다도무지 이해가 안 가 심사문제 하단 해설을 참고하며 이렇게 작성했는데, 

에러 이렇게 에러가 뜹니다. 


어느 부분이 틀렸는지 모르겠어서 질문 남깁니다.

, 도장_ 관리자님이 작성
 
포럼 상단 오른쪽에 23.7로 검색하면 이전 질문과 답변을 볼 수 있습니다.

종이와 펜으로 로직을 정리하고, 코딩을 시작하는 게 좋습니다.
코딩만으로는 막막합니다.
지뢰를 판단하는 규칙을 먼저 정리해야 합니다.
...
.X.
..*
X 위치에서 주변 8개 셀에 지뢰가 있는지 확인하는 로직이 필요합니다.
X 위치를 중심으로 3x3 셀을 검사하는 게 필요합니다.
10x10 행렬에서 대부분의 셀은 3x3 셀 검사로 됩니다.
그러면 행렬의 테두리에 있는 경계 셀은 어떻게 검사할까? 검사 범위를 제한해야 하죠.
검사 범위를 제한하지 않으면 인덱스 범위를 벗어나고 오류가 발생하게 됩니다.

이 문제는 2차원 배열을 사용할 줄 아는가, 제대로 이해하고 있는가? 응용할 수 있는가?
배열의 경계 값을 처리할 수 있는가? 경계 값을 처리하기 위해 제어문의 로직을 사용할 줄 아는가? break와 continue가 필요한가? 사용할 줄 아는가?

어려우면 패스하고 나중에 다시 도전하면 됩니다.

, 이 purn님이 작성
 

col, row = map(int, input().split())
matrix = []
for i in range(row):
    matrix.append(list(input()))
    print()
    for i in range(row):
        for j in range(col):
이 이후에 어떻게 접근할지를 모르겠습니다. 조금만 도움을 주시면 감사하겠습니다

, 도장_ 관리자님이 작성
 

글 삭제는 지원하지 않습니다.

감사합니다.


, 유 다희님이 작성
 

질문사항이 해결되었는데 글 삭제가 안돼서 우선 그대로 두겠습니다.

삭제 방법을 알려주시면 삭제하도록 하겠습니다.

감사합니다.


-------------------



파이썬 코딩 도장 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의 복수형입니다.

메시지를 해석하면

리스트 인덱스는 정수이거나 슬라이서이어야 하고, 튜플이 아닙니다. 그것도 아니라면 당신은 아마도 콤마를 생략했을 겁니다.

라는 뜻입니다.

메시지를 잘 읽으면 문제를 알 수 있고, 해법도 생각할 수 있습니다.


, lee taker님이 작성
 

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()


실행되지 않는 코드라고 나오는데 이유를 모르겠습니다. 조언 부탁드립니다.

    

    

, 안 재인님이 작성
 
p. 312

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] 형태가 맞는건가요?


아직도 행렬이 헷갈리네요.....