[JS알고리즘] 두 배열 합치기
in Algorithm
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
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++]); //p1++는 후치연산으로 answer에 집어넣고 나서 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));
p1이 a배열의 길이보다 작고 p2가 b배열의 길이보다 작을때
두 배열의 값을 비교한 뒤 (=
arr1[p1]<=arr2[p2]
) arr1[p1]의 값이 작으면 arr1의p1인덱스를 answer에 push 하고, 인덱스를 증가시킨다(arr1[p1++]
)( arr1[p1++] 이거 짱신기하다 ㅇ0ㅇ 후치연산이라니..! )
arr2[p2]의 값이 작으면 그 값을 넣어준다
단편적으로 a와 b배열처럼 길이가 다르다면 a가 끝나고 b만 남았을때 남은 b의 인자들을 그냥 쭉- answer에 넣어준다
(코드화시킨것 =
(p2<m) answer.push(arr2[p2++]);
)
two pointers 알고리즘을 이용한 문제인데
투 포인터 알고리즘은 1차원 배열이 있고 이 배열에서 각자 다른 원소를 가리키고 있는 2개의 포인터를 조작해가면서 원하는 것을 얻는 형태라고 한다.
이곳 참조
inflearn 자바스크립트 알고리즘 강의 내용 =)