해결된 질문
작성
·
159
·
수정됨
0
몇 챕터/몇 강을 수강 중이신가요? 3-4
병합 정렬 구현해볼 때 두 배열의 비교하는 값이 같은 경우에서의 처리가 안되어 있는 것 같습니다.
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
이므로, else 절이 실행됩니다.
result
배열에 1
이 추가되고, array2_index
가 증가합니다.
다시 비교를 진행합니다.
첫 번째 배열의 첫 번째 요소(1
)와 두 번째 배열의 두 번째 요소(1
)를 비교합니다.
동일하게 else 절이 실행되어 result
배열에 1
이 추가되고, array2_index
가 또 증가합니다.
세 번째 비교에서는 첫 번째 배열의 첫 번째 요소(1
)와 두 번째 배열의 세 번째 요소(3
)를 비교합니다.
첫 번째 배열의 값이 더 작으므로, if
절이 실행되어 result
배열에 1
이 추가되고, array1_index
가 증가합니다.
이 과정을 반복하면 최종적으로 result
배열에는 [1, 1, 1, 1, 3, 3]
이 저장됩니다.
원달러 님의 코드는 동일한 값을 모두 넣기 위해 else
절에서 두 값을 각각 추가하도록 설계되었습니다.
이 경우에도 동일한 입력을 처리했을 때 result
배열은 [1, 1, 1, 1, 3, 3]
이 되지만, 코드 동작 방식이 약간 다릅니다.
원달러 님 코드에서는 동일한 값을 만날 때 두 값을 각각 한 번씩 추가하고, first_array_index
와 second_array_index
모두 증가시키기 때문에 두 배열에서 중복된 값이 있을 때 모든 경우를 명시적으로 추가하는 결과를 얻을 수 있습니다.
이 방식은 명확하게 동일한 값 처리 로직을 작성하려는 의도에 적합하며, 특정 상황에서 더 직관적일 수 있습니다.
결론적으로, 두 코드 모두 결과는 동일하지만, 작성 목적과 의도에 따라 선택할 수 있습니다! 😊
다시 한 번 열심히 공부해 주셔서 감사드리며, 추가적으로 궁금하신 점은 언제든 질문 주세요! 💙
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을 참고하세요:
- 결합 정렬과 동일 값 처리
저는 질문자님의 코드 이해를 돕고자 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 계속해서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아아 그렇게 되겠네요..! 제가 좀 더 확인해보고 글 남겼어야 했는데 죄송합니다 ㅠ 친절한 답변 너무 감사드려요! 새해 복 많이 받으세요 딩코딩코님~~