채널톡 아이콘

인프런 커뮤니티 질문&답변

viktor2222123님의 프로필 이미지

작성한 질문수 2

38군데 합격 비법, 2024 코딩테스트 필수 알고리즘

3-4. 정렬 - 3

3주차 병합정렬 해결방법

해결된 질문

작성

·

149

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요?

  • 어떤 알고리즘을 학습하고 계신가요?

  • 여기까지 이해하신 내용은 무엇인가요?

 

2. 어려움을 겪는 부분

  • 어느 부분에서 막히셨나요?

  • 코드의 어떤 로직이 이해가 안 되시나요?

  • 어떤 개념이 헷갈리시나요?

 

3. 시도해보신 내용

  • 문제 해결을 위해 어떤 시도를 해보셨나요?

  • 에러가 발생했다면 어떤 에러인가요?

  • 현재 작성하신 코드를 공유해주세요

 

이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊

 

merge 함수에 return이 빠진거같습니다!

 

 

답변 4

0

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

오 발견했습니다 viktor 님!!! 당장 변경했습니다

발견해주셔서 넘넘 감사드려요 ㅎㅎㅎ

감사의 의미로 커피 기프티콘을 드리고 싶습니다 아래 카카오톡 오픈 링크로 연락 부탁드립니다!!

https://open.kakao.com/me/ding_coding_co

감사합니다

0

viktor2222123님의 프로필 이미지
viktor2222123
질문자

https://fern-freeze-290.notion.site/3-eda59f516d3d4372bdabe54674101396#651c3531904640bebbabb13d2c1fb59b

[코드스니펫] 병합정렬 - merge

^ 이쪽입니다!

바로 아래 해결 방법입니다!

 

array_a = [1, 2, 3, 5]
array_b = [4, 6, 7, 8]


def merge(array1, array2):
    result = []
    array1_index = 0
    array2_index = 0

    while array1_index < len(array1) and array2_index < len(array2):
        if array1[array1_index] < array2[array2_index]:
            result.append(array1[array1_index])
            array1_index += 1
        else:
            result.append(array2[array2_index])
            array2_index += 1

    while array1_index < len(array1):
        result.append(array1[array1_index])
        array1_index += 1

    while array2_index < len(array2):
        result.append(array2[array2_index])
        array2_index += 1

    ## return result  ## return result 가 없음

print(merge(array_a, array_b))

print("정답 = [-7, -1, 5, 6, 9, 10, 11, 40] / 현재 풀이 값 = ", merge([-7, -1, 9, 40], [5, 6, 10, 11]))
print("정답 = [-1, 2, 3, 5, 10, 40, 78, 100] / 현재 풀이 값 = ", merge([-1,2,3,5,40], [10,78,100]))
print("정답 = [-1, -1, 0, 1, 6, 9, 10] / 현재 풀이 값 = ", merge([-1,-1,0], [1, 6, 9, 10]))

 

0

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

안녕하세요 viktor님!! 좋은 질문 남겨주셔서 감사합니다

 

제가 코드 부분과 영상 부분에 merge 함수에 return 이 빠진 부분을 찾아봤습니다

 

우선 코드 내에서는 이렇게 되어있고,

def merge(array1, array2):
    result = []
    array1_index = 0
    array2_index = 0
    while array1_index < len(array1) and array2_index < len(array2):
        if array1[array1_index] < array2[array2_index]:
            result.append(array1[array1_index])
            array1_index += 1
        else:
            result.append(array2[array2_index])
            array2_index += 1

    while array1_index < len(array1):
        result.append(array1[array1_index])
        array1_index += 1

    while array2_index < len(array2):
        result.append(array2[array2_index])
        array2_index += 1

    # 이 부분을 채워보세요!
    return result

영상(3-4. 정렬 - 3 의 7:44)내 에서도 return 문이 있는것으로 파악했습니다

 

혹시 어떤 부분에 return 이 없는지 알려주실 수 있을까요? 꼭 개선하겠습니다 __

3-4. 정렬 - 33-4. 정렬 - 3

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

viktor2222123님, 병합 정렬의 해결 방법에 대해 궁금하신 점이 있으시군요.

병합 정렬(Merge Sort)은 분할 정복(divide and conquer) 알고리즘의 대표적인 예시로, 리스트를 두 부분으로 나누고, 각각을 재귀적으로 정렬한 후, 두 정렬된 부분을 병합하는 과정입니다.

  1. 병합 정렬의 로직:

    • 리스트가 길이 1 이하가 될 때까지 계속 절반으로 나눈다.
    • 나누어진 리스트들을 각각 정렬한 뒤, 두 리스트를 하나로 병합하면서 정렬한다.
  2. 병합 함수에서의 문제:

    • 병합 함수에서 return 값이 없거나, 올바르지 않을 경우, 정렬이 정상적으로 완료되지 않을 수 있습니다.
    • 두 리스트를 병합할 때, 결과 리스트를 반환해야 하는데, 이 return 값이 빠져 있다면 결과가 제대로 전달되지 않을 수 있습니다.
  3. 해결 방법:

    • 병합할 때 만든 정렬된 리스트를 return 하도록 함수를 수정하세요.
    • 예를 들어, 병합 함수는 다음과 같이 코딩할 수 있습니다:
    def merge(left, right):
        result = []
        while left and right:
            if left[0] <= right[0]:
                result.append(left.pop(0))
            else:
                result.append(right.pop(0))
    
    
        # 남아있는 요소들 추가
        result.extend(left or right)
        return result
    

viktor2222123님께서 좀 더 정확하게 시도하신 내용을 알려주시면, 문제 해결에 더 도움이 될 수 있을 것입니다. 추가적인 어려움이나 질문이 있다면 언제든지 말씀해 주세요! 😊

출처 이미지가 필요한 경우, 코드 작성이나 추가적인 학습 자료를 제공받을 수 있는 인프런 강의 질문하기도 고려해 보세요.