코딩테스트/JavaScript
[코딩테스트] 공통원소 구하기
CODE_PLAN
2023. 12. 29. 21:26
나의 풀이
function solution(arr1, arr2) {
let answer = [];
let newArr = arr1.concat(arr2);
newArr.sort()
console.log(newArr)
return answer;
}
let a = [1, 3, 5];
let b = [2, 3, 6, 7, 9];
console.log(solution(a, b));
이렇게 풀었는데 해설에서는 sort 는 nlogn 시간복잡도를 가진다고하고
투 포인터 알고리즘을 사용하면 n +m 시간복잡도를 가져서 푼다고한다.
function solution(arr1, arr2) {
let answer = [];
for (let j = 0; j < a.length; j++) {
for (let k = 0; k < b.length; k++) {
if (a[j] > b[k]) {
answer.push(b[k])
} else if (a[j] < b[k]) {
answer.push(a[j])
}
}
}
console.log(answer)
for (let i = b.length - a.legth; i < b.length; i++) {
answer.push(b)
}
return answer;
}
let a = [1, 3, 5];
let b = [2, 3, 6, 7, 9];
console.log(solution(a, b));
두번째 풀이로 위처럼 해봤지만 잘 안되었었고 판단 미스가 있었는데
경우의 수가 다 돌고나서 나머지 경우의 수를 2가지로 나눠줘야하는데 나는 1개만 나눠줬었다.
모범 답안
function solution(arr1, arr2){
let answer=[];
let n=arr1.length;
let m=arr2.length;
let p1=p2=0;
while(p1<n && p2<m){
if(arr1[p1]<=arr2[p2]) answer.push(arr1[p1++]);
else answer.push(arr2[p2++]);
}
while(p1<n) answer.push(arr1[p1++]);
while(p2<m) answer.push(arr2[p2++]);
return answer;
}
let a=[1, 3, 5];
let b=[2, 3, 6, 7, 9];
console.log(solution(a, b));
풀이 핵심 포인트 1) p1=p2=0 으로 지정
2) 경우의수가 끝나고 남을경우 2개로 지정해서 따로 각각 써줘야한다는점
3) while() 안에 &&가 있으면 둘중하나가 거짓이 되면 끝난다 ( 이유는 and 연산자 이기때문 )