두 개의 집합이 주어지면, 각 공통원소를 뽑아서 오름차순으로 나열하라.
예시)
입력 :
1 3 9 5 2
3 2 5 7 8
출력 :
2 3 5
<script>
function solution(arr1,arr2){
let answer = [];
for(let i=0;i<arr1.length;i++){
for(let j=0;j<arr2.length;j++){
if(arr1[i]===arr2[j]) {
answer.push(arr1[i]);
break;
}
}
}
answer.sort();
return answer;
}
</script>
2중 for문을 이용한다.
arr1 배열의 원소하나당, arr2 배열의 원소 전부와 비교하여 같은 같이 존재하는지 확인한다. (같은 값이면 answer에 push)
마지막 answer 를 정렬하여 반환한다.
<script>
function solution2(arr1,arr2){
let answer = [];
arr1.sort((a,b)=>a-b);
arr2.sort((a,b)=>a-b);
let p1=p2=0;
while( p1<arr1.length && p2<arr2.length){
if(arr1[p1]===arr2[p2]){
answer.push(arr1[p1]);
p1 ++;
p2 ++;
}
else if(arr1[p1]<arr2[p2]) p1++;
else p2 ++;
}
return answer;
}
</script>
여기는 입력받은 두개의 배열을 우선 정렬한다.
이후에 각 배열마다 위치를 가리키는 포인트를 설정하여 이를 하나씩 더해가며 값을 비교한다.
경우 1, 두 포인터가 가리키는 값이 같다 -> answer에 push, 두 포인터값증가
경우 2, arr1의 포인터가 가리키는 값이 더 작다. -> arr1 포인터 값 증가
경우 3, arr2의 포인터가 가리키는 값이 더 작다. -> arr2 포인터 값 증가