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))
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력