병합정렬 문제에서 조건이 하나 빠진 것 같습니다
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이므로, 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을 참고하세요:
- 결합 정렬과 동일 값 처리
저는 질문자님의 코드 이해를 돕고자 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 계속해서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요
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





