[JS알고리즘] 두 배열 합치기



오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.


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));
  1. p1이 a배열의 길이보다 작고 p2가 b배열의 길이보다 작을때

  2. 두 배열의 값을 비교한 뒤 (=arr1[p1]<=arr2[p2]) arr1[p1]의 값이 작으면 arr1의p1인덱스를 answer에 push 하고, 인덱스를 증가시킨다(arr1[p1++])

    ( arr1[p1++] 이거 짱신기하다 ㅇ0ㅇ 후치연산이라니..! )

  3. arr2[p2]의 값이 작으면 그 값을 넣어준다

  4. 단편적으로 a와 b배열처럼 길이가 다르다면 a가 끝나고 b만 남았을때 남은 b의 인자들을 그냥 쭉- answer에 넣어준다

    (코드화시킨것 = (p2<m) answer.push(arr2[p2++]);)


two pointers 알고리즘을 이용한 문제인데

투 포인터 알고리즘은 1차원 배열이 있고 이 배열에서 각자 다른 원소를 가리키고 있는 2개의 포인터를 조작해가면서 원하는 것을 얻는 형태라고 한다.

이곳 참조



inflearn 자바스크립트 알고리즘 강의 내용 =)




© 2018. by sora

Powered by sora