나의 풀이 

 function solution(arr1, arr2) {
            let answer = [];
            let n = arr1.length;
            let m = arr2.length;
            let p1 = p2 = 0;

            // for (let i = 0; i < n; i++) {
            //     if (arr1[i].includes(arr2)) {
            //         answer.push(arr[i])
            //     }
            // }
            let newArr1 = arr1.sort((a, b) => a - b);
            let newArr2 = arr2.sort((a, b) => a - b);
            console.log(newArr1)
            console.log(newArr2)
            

            while (p1 < n && p2 < m) {
                // console.log(newArr2[p2])
                if (newArr1[p1] < newArr2[p2]) newArr1[p1++];
                else if (newArr1[p1] = newArr2[p2]) {
                    answer.push(newArr2[p2])
                } else {
                    newArr2[p2++];
                }
            }
            return answer;
        }

        let a = [1, 3, 9, 5, 2];
        let b = [3, 2, 5, 7, 8];
        console.log(solution(a, b));

우선 나는 위처럼 풀었는데 invalid array length 로 오류가 나왔었다.

좀 더 원인을 알아보니 newArr1[p1++] 이런부분을 그냥 p1++이런식으로 작성해야 했었다.

풀이식은 정답과 거의 유사

 

모범 답안

  function solution(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++]);
                        p2++;
                    }
                    else if(arr1[p1]<arr2[p2]) p1++;
                    else p2++;
                }              
                return answer;
            }
            
            let a=[1, 3, 9, 5, 2];
            let b=[3, 2, 5, 7, 8];
            console.log(solution(a, b));

풀이 포인트1) p2++ 처럼 p2도 같이 증가해줘야 한다는점

2) sort는 문자열로 나오게 함으로서 2자리이상의 숫자일때 sort에 조건을 안적어주면 1 10 2 이런식으로 오름차순을해도 잘 출력이 잘되지않을수 있음으로 조건을 적어주자 

3) arr1[p1++] 이렇게 적어서 p1포함해서 ++ 해준다.

+ Recent posts