배열과 탐색·연습 문제

정렬된 두 배열 합치기

문제 설명PROBLEM

정렬된 두 배열 합치기

왜 이 문제를 푸나요?

두 정렬 결과를 다시 정렬하지 않고 선형 시간에 합치는 과정은 병합 정렬의 핵심입니다. 두 포인터가 각각 한 방향으로만 움직이는 패턴을 익힙니다.

익혀야 할 개념

  • 두 포인터
  • 정렬 불변식
  • 남은 꼬리 처리
  • O(n+m)

과제

오름차순으로 정렬된 두 리스트를 하나의 오름차순 리스트로 합치세요. 모든 원소와 중복을 유지하며 sorted()sort()는 사용하지 않습니다.

함수

merge_sorted(left, right)

목표 복잡도

시간 O(n+m), 공간 O(n+m)

테스트 케이스

실행하면 아래 순서대로 채점합니다. print() 출력도 이 순서대로 쌓입니다.

#이름leftright기대값
1서로 교차[1, 4, 8][2, 3, 9][1, 2, 3, 4, 8, 9]
2중복 유지[1, 2, 2][2, 5][1, 2, 2, 2, 5]
3한쪽이 비어 있음[][3, 7][3, 7]
4양쪽 모두 비어 있음[][][]
5음수 교차[-7, -1, 4][-5, 0, 6][-7, -5, -1, 0, 4, 6]

Python 표준 라이브러리는 사용할 수 있습니다. 함수 이름과 매개변수는 제시된 형태를 유지하세요.

개념 노트와 실수 포인트

배열과 탐색

  • 배열(파이썬 list)은 인덱스로 읽을 때 O(1), 처음부터 값을 찾을 때 O(n) 입니다.
  • 빈 배열, 중복 값, 찾는 값이 없는 경우를 항상 확인하세요.