강의

멘토링

로드맵

Inflearn brand logo image

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

WonDollar님의 프로필 이미지
WonDollar

작성한 질문수

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

3-4. 정렬 - 3

병합정렬 문제에서 조건이 하나 빠진 것 같습니다

해결된 질문

작성

·

159

·

수정됨

0

1. 현재 학습 진도

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

     

 

2. 어려움을 겪는 부분

병합 정렬 구현해볼 때 두 배열의 비교하는 값이 같은 경우에서의 처리가 안되어 있는 것 같습니다.

 

3. 시도해보신 내용

while first_array_index < len(array1) and second_array_index < len(array2):
    if array1[first_array_index] < array2[second_array_index]:
        result_array.append(array1[first_array_index])
        first_array_index += 1
    elif array1[first_array_index] > array2[second_array_index]:
        result_array.append(array2[second_array_index])
        second_array_index += 1
    else:
        result_array.append(array1[first_array_index])
        result_array.append(array2[second_array_index])
        first_array_index += 1
        second_array_index += 1 

 

동일한 값을 비교할 경우 두 값을 모두 result 배열에 넣어줘야 하니까 else의 코드도 있어야 하지 않을까 생각이 들어 글 남깁니다!

 

좋은 강의 감사드립니다!

답변 2

0

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

안녕하세요 WonDollar 님!

좋은 질문해주셔서 감사합니다 ㅎㅎㅎ 매우 열심히 공부해주시는 모습에 넘넘 감사드립니다!!

 

제가 수업때 작성했던 코드가 다음과 같은데, 원달러님의 코드로도 동일하게 동작이 가능합니다!

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

 

예를 들어서 [1, 1, 3] [1, 1, 3] 이라는 배열이 입력되었을 때를 가정해보겠습니다.

제가 작성한 코드의 동작방식은 다음과 같습니다:

  1. 두 배열의 첫 번째 요소를 비교합니다.

    • 두 배열 모두 첫 번째 요소가 1이므로, else 절이 실행됩니다.

    • result 배열에 1이 추가되고, array2_index가 증가합니다.

  2. 다시 비교를 진행합니다.

    • 첫 번째 배열의 첫 번째 요소(1)와 두 번째 배열의 두 번째 요소(1)를 비교합니다.

    • 동일하게 else 절이 실행되어 result 배열에 1이 추가되고, array2_index가 또 증가합니다.

  3. 세 번째 비교에서는 첫 번째 배열의 첫 번째 요소(1)와 두 번째 배열의 세 번째 요소(3)를 비교합니다.

    • 첫 번째 배열의 값이 더 작으므로, if 절이 실행되어 result 배열에 1이 추가되고, array1_index가 증가합니다.

  4. 이 과정을 반복하면 최종적으로 result 배열에는 [1, 1, 1, 1, 3, 3]이 저장됩니다.


원달러 님의 코드는 동일한 값을 모두 넣기 위해 else 절에서 두 값을 각각 추가하도록 설계되었습니다.
이 경우에도 동일한 입력을 처리했을 때 result 배열은 [1, 1, 1, 1, 3, 3]이 되지만, 코드 동작 방식이 약간 다릅니다.

  • 원달러 님 코드에서는 동일한 값을 만날 때 두 값을 각각 한 번씩 추가하고, first_array_indexsecond_array_index 모두 증가시키기 때문에 두 배열에서 중복된 값이 있을 때 모든 경우를 명시적으로 추가하는 결과를 얻을 수 있습니다.

  • 이 방식은 명확하게 동일한 값 처리 로직을 작성하려는 의도에 적합하며, 특정 상황에서 더 직관적일 수 있습니다.

결론적으로, 두 코드 모두 결과는 동일하지만, 작성 목적과 의도에 따라 선택할 수 있습니다! 😊

다시 한 번 열심히 공부해 주셔서 감사드리며, 추가적으로 궁금하신 점은 언제든 질문 주세요! 💙

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

아아 그렇게 되겠네요..! 제가 좀 더 확인해보고 글 남겼어야 했는데 죄송합니다 ㅠ 친절한 답변 너무 감사드려요! 새해 복 많이 받으세요 딩코딩코님~~

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

오 아닙니다!! 항상 좋은 질문 남겨주셔서 감사합니다 ㅎㅎ 새해복 많이 받으세요!!

0

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

병합 정렬 구현 시 두 배열의 요소를 비교하여 정렬할 때, 동일한 값이 나올 경우 처리에 대한 부분을 고민하고 계신 것 같습니다. 병합 정렬은 두 정렬된 배열을 병합할 때, 통상적으로 비교하여 작은 값을 결과 배열에 넣습니다. 동일한 값이 나왔을 때 두 값 모두를 결과 배열에 넣는 것은, 중복 값을 고려한 구현 방법입니다.

병합 정렬 시 동일한 값 처리:

  • 동일한 값을 처리하지 않고 한쪽 배열의 값을 먼저 결과 배열에 넣는다: 데이터 정렬 시 중복을 무시하거나 하나로 간주하고 처리하는 주요한 방법입니다. 이 방식은 동일한 데이터가 단일 배치 내에서는 일관되게 처리될 수 있도록 합니다.

  • 두 값을 모두 결과 배열에 넣는다: 중복을 허용해야 하거나 실제 데이터에서 중복이 필요한 경우에 적용할 수 있습니다.

위에 제시한 코드는 후자의 경우를 고려하여 작성된 것 같습니다. ‘else’ 블록에서 두 값을 모두 결과 배열에 넣고, 두 인덱스 모두 증가시키는 부분이 중복을 허용하는 방식입니다. 이 경우 중복된 값을 모두 결과에 반영할 수 있습니다.

코드 참고 사항:
- else 블록은 다음과 같이 구현하여 동일한 값을 모두 결과 배열에 추가하고 있습니다.

  else:
      result_array.append(array1[first_array_index])
      result_array.append(array2[second_array_index])
      first_array_index += 1
      second_array_index += 1

위 처리는 두 배열 중 동일한 데이터가 있을 경우, 중복되어 배열에 적재되어야 하는 특별한 경우에 유용합니다.

동일한 조건에 관련하여 이전 답변이나 유사한 문제에 대한 추가 참고가 필요하시다면, 다음 URL을 참고하세요:
- 결합 정렬과 동일 값 처리

저는 질문자님의 코드 이해를 돕고자 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 계속해서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

WonDollar님의 프로필 이미지
WonDollar

작성한 질문수

질문하기