IF - 두 배열 합치기

Goody·2021년 4월 12일
0

알고리즘

목록 보기
83/122

문제

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


예시

Input1Input2Output
[1,3,5][2,3,6,7,9][1,2,3,3,5,6,7,9]

풀이 및 회고

  • 단순히 두 배열을 합친다음 sort 로 오름차순으로 정렬하면 풀이 자체는 쉽겠지만, 이미 정렬되어있는 배열을 또 정렬해야 한다는 점에서 효율성이 좋지 않다.
  • 따라서 이번 문제에서는 투 포인터 알고리즘을 통해 문제를 풀었다.
  • 두 개의 포인터를 두고, 포인터 각자는 하나의 배열 내 원소를 가리킨다.
  • 오름차순으로 정렬해야 하므로, 두 포인터 중 더 작은 포인터가 가리키는 값을 새로운 배열에 삽입하고, 포인터의 위치를 한칸 오른쪽으로 이동시킨다. 이 작업을 반복한다.
  • 두 포인터가 모두 주어진 배열의 범위를 넘어가면, 루프를 중지시킨다.
  • 풀이 자체는 간단했으나, 직접 종이에 그려보기 까지의 행동이 많이 느려서 시간을 잡아먹었다.

코드

const solution = (array1, array2) => {
    let lIndex = 0;
    let rIndex = 0;
    const result = [];
    
    while(true){
        let lPointer = array1[lIndex];
        let rPointer = array2[rIndex];

        if(!lPointer && !rPointer) break;
        
        if(lPointer <= rPointer || !rPointer) {
            result.push(lPointer);
            lIndex++;
        }
        if(rPointer <= lPointer || !lPointer) {
            result.push(rPointer);
            rIndex++;
        }

    }

    return result;
}

0개의 댓글