binarysearch문제 질문

조회수 892회

정렬된 2차원 리스트에서 이진탐색을 이용해 원하는 값이 있으면 true를 출력하고 아니라면 false를 출력하는 알고리즘을 만드려고 합니다.

matrix = [
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]

def searchMatrix(matrix, target):

    matrix1 = sum(matrix, [])

    if len(matrix1) == 1 and target == matrix1[0]:
        return True

    if len(matrix1) == 1 and target != matrix1[0]: 
        return False

    if len(matrix1) == 0: 
        return False

    medium = len(matrix1) // 2 
    if target == matrix1[medium]:
        return True
    else:
        if target > matrix1[medium]: 
            return searchMatrix(matrix1[medium:], target) 
        else:
            return searchMatrix(matrix1[:medium], target)

생각한 방법은 2차원 list를 1차원으로 풀어내고 풀어낸 리스트에서 이진탐색을 실행하는 것인데

can only concatenate list (not "int") to list

라는 오류만 뜨고 해결을 못하네요.

어떻게 해결해야할지 알려주세요.

1 답변

  • 재귀 함수의 맨 처음 입력으로 2차원 리스트를 넣었는데, 재귀 함수 내부에서 다시 재귀 호출할 때에는 1차원 리스트가 들어가고 있습니다.

    에러가 나는 부분은 matrix1 = sum(matrix, [])입니다. 이 코드가 동작하려면 matrix가 2차원 리스트여야 하는데, 맨 처음에는 2차원이어서 문제가 없었으나 다시 재귀 호출하는 과정에서 1차원으로 리스트가 바뀌고 바뀐 1차원 리스트가 sum 함수로 들어가서 에러가 난 겁니다.

    sum 함수의 코드를 밖으로 빼십시오.

    그리고 밑에서 3번째 줄의 matrix1[medium:]matrix1[medium+1:]로 하는 것이 맞는거 같습니다.

    수정된 아래 코드 참고하세요.

    
    def searchMatrix(matrix1, target):
        if len(matrix1) == 1 and target == matrix1[0]:
            return True
    
        if len(matrix1) == 1 and target != matrix1[0]: 
            return False
    
        if len(matrix1) == 0: 
            return False
    
        medium = len(matrix1) // 2 
        if target == matrix1[medium]:
            return True
        else:
            if target > matrix1[medium]: 
                return searchMatrix(matrix1[medium + 1:], target) 
            else:
                return searchMatrix(matrix1[:medium], target)
    
    
    matrix = [
      [1,   3,  5,  7],
      [10, 11, 16, 20],
      [23, 30, 34, 50]
    ]
    
    
    new_matrix = sum(matrix, [])
    print(searchMatrix(new_matrix,49))
    print(searchMatrix(new_matrix,50))
    
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)