inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

3-4. 정렬 - 3

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

해결된 질문

192

WonDollar

작성한 질문수 2

0

1. 현재 학습 진도

 

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의 코드도 있어야 하지 않을까 생각이 들어 글 남깁니다!

 

좋은 강의 감사드립니다!

python 코딩-테스트 알고리즘 data-structure

답변 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 모두 증가시키기 때문에 두 배열에서 중복된 값이 있을 때 모든 경우를 명시적으로 추가하는 결과를 얻을 수 있습니다.

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

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

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

1

WonDollar

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

0

딩코딩코

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

0

인프런 AI 인턴

안녕하세요, 인프런 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을 참고하세요:
- 결합 정렬과 동일 값 처리

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

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

55

2

3-3 정렬-2 선택정렬 로직

0

36

2

링크드 리스트 끝에서 k번째 값 출력하기

0

42

2

LinkedList 과제 Fast, slow 포인터

0

49

2

투포인터 시간복잡도

0

50

2

수강평 작성 후 자료

0

50

2

수업교재 링크 오류

2

106

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

127

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

69

2

문제 풀이 방식 관련 질문입니다!

0

81

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

86

2

수업자료 pdf 받고싶습니다

0

103

2

강의 자료 오류 수정

0

70

1

2-10 더하거나 빼거나 관련 질문입니다

0

61

2

3-8 해쉬 -2

0

48

2

Linked List Element Delete Explanation Problem

0

66

2

강의3-4 스택 탑 문제

0

74

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

98

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

74

2

1874 - 스택 문항

0

80

2

DP Java 예제 자료형 오버플로우 문제

0

97

2

4-9 4주차 숙제중 농심라면 문제

0

107

2

DFS 에서 스택을 사용하는 이유

1

183

3

들여쓰기가 햇갈리네요

0

120

2