1.문제
2.내 코드
3.twoPointer를 이용한 코드
오름차순 정렬이 되어있는 두 배열이 입력되면, 두 배열을 오름차순으로 합쳐 하나의 배열로 만들어 출력하시오.
예시)
입력 :
1 3 5
2 3 6 7 9
출력 :
1 2 3 3 5 6 7 9
<script>
function solution(arr1,arr2){
let answer = [];
while(arr1.length && arr2.length){
if(arr1[0]<arr2[0]){
answer.push(arr1[0]);
arr1.shift();
}else if(arr1[0]>arr2[0]){
answer.push(arr2[0]);
arr2.shift();
}else{
answer.push(arr1[0],arr2[0]);
arr1.shift();
arr2.shift();
}
}
answer.push(...arr2,...arr1);
return answer;
}
</script>
두 배열의 앞 쪽 원소를 각각 비교하여 더 작은 값을 하나씩 새로운 배열에 push하는 방식을 이용합니다.
하나의 배열이 종료되면, 다른 배열의 나머지 원소를 전부 입력합니다.
<script>
function solution2(arr1,arr2){
let answer = [];
let p1=p2 =0;
while(p1<arr1.length && p2<arr2.length){
if(arr1[p1]<=arr2[p2]) answer.push(arr1[p1++]);
else answer.push(arr2[p2++]);
}
while(p1<arr1.length) answer.push(arr1[p1++]);
while(p2<arr2.length) answer.push(arr2[p2++]);
return answer;
}
</script>
p1, p2 두개의 포인터를 이용한 방법입니다.
포인터를 각각 0부터 시작하여 각 배열의 원소값을 비교합니다.
비교하여 더 작은 값을 새 배열에 Push하고 해당 배열의 포인터를 증가시킵니다.