ALGORITHM/Inflearn
효율성(투포인터 알고리즘) - 두 배열 합치기
Harimad
2022. 2. 16. 18:54

문제
오름차순으로 정렬된 두 배열이 주어지면
두 배열을 오름차순으로 합쳐 출력하는 함수 만들어보기
let a=[1, 3, 5]; (조건: 각 리스트의 원소는 int형 변수)
let b=[2, 3, 6, 7, 9];
console.log(solution(a, b));
출력예제
1 2 3 3 5 6 7 9
풀이
이 문제를 단순하게 아래처럼 한 배열에 넣고 sort를 돌리면 문제의 의도와 맞지가 않다.
sort는 시간복잡도가 n log n이 걸린다.
function solution(arr1, arr2){
let answer = [];
answer.push(...arr1, ...arr2);
answer.sort((a, b) => a - b);
return answer;
}
투 포인터 알고리즘은 두 배열을 한 번씩만 훑기 때문에
시간복잡도는 배열의 길이 n + 다른 배열의 길이 m 이다.
더 효율적이다.

코드
function solution(arr1, arr2){
let answer = [];
let n = arr1.length;
let m = arr2.length;
let p1 = p2 = 0; //두 포인터 값 초기화
while(p1 < n && p2 < m) {
if (arr1[p1] <= arr2[p2]) answer.push(arr1[p1++]);
else answer.push(arr2[p2++]);
}
while(p1 < n) answer.push(arr1[p1++]);
while(p2 < m) answer.push(arr2[p2++]);
return answer;
}
let a=[1, 3, 5];
let b=[2, 3, 6, 7, 9];
console.log(solution(a, b));
출처
자바스크립트 알고리즘 문제풀이(코딩테스트 대비) - 인프런 | 강의
자바스크립트(JavaScript)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 재미있게 풀 수 있는 기초 단계 문제부터 고급 알고리즘까지 단계별로 차근차근 배우도록 설계된 강좌입니다., - 강의
www.inflearn.com