공통원소 구하기

지창언·2022년 8월 26일

codingTest

목록 보기
28/29

Index

1.문제
2.내 코드
3.발전시킨 코드


문제

두 개의 집합이 주어지면, 각 공통원소를 뽑아서 오름차순으로 나열하라.
예시)
입력 :
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 포인터 값 증가


profile
프론트엔드 개발자가 되고 싶은...

0개의 댓글