반응형
📌강의정리
이중포문을 이용해서 하면 되긴 하지만 투포인터를 배웠으니 투포인터를 해보자.
arr1,2를 정렬한다.
정렬후 투포인터로 비교하며 같은경우를 push를 하는데 다른경우는 작은경우의
포인터를 증가시킨다.
작은값을 증가시켜야 나중에 같은값을 다시 매칭시킬 수 있지 큰 값을 증가시키면
반대편에 같은값이 있었을 수도 있다.
arr1.sort()로 정렬해준다.
while문으로 조건을 arr1,arr2가 그 배열의 길이보다 작을때로 맞춰주고
같은경우 push로 앤서값에 넣어주고 나머지는 else if , else로 포인터를 증가시켜준다.
sort()는 배열을 문자열로 정렬하기때문에 우리가 원하는 숫자의 정렬이 안된다.
따라서 안에 함수를 새로 설정해주어서 우리가 원하는 방식으로 정렬되게해야한다.
arr1.sort((a,b)⇒a-b); 콜백함수로 정렬기준을 정해주면 숫자정렬이 된다.
📌느낀점
내가 푼 방법과 완전히 같이 풀었다.
투포인터알고리즘은 다른 문제를 풀때도 응용하기 좋을 것 같다.
잘 기억하고 잘 사용해야겠다.
220614 +) 과거의 나는 실력이 좋았던건지 안좋았던건지… 과거와 지금을 잘 섞으면 좋을 것 같다.
//220614
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr1, arr2) {
let answer = [];
let p1 = (p2 = 0);
arr1.sort((a, b) => a - b);
arr2.sort((a, b) => a - b);
while (p1 < arr1.length && p2 < arr2.length) {
if (arr1[p1] === arr2[p2]) {
answer.push(arr1[p1++]);
p2++;
} else p1++;
}
return answer;
}
let a = [1, 3, 9, 5, 2];
let b = [3, 2, 5, 7, 8];
console.log(solution(a, b));
</script>
</body>
</html>
//나의 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr1, arr2){
let answer=[];
let n = arr1.length;
let m = arr2.length;
let p1=p2=0;
arr1.sort((a,b)=>a-b);
arr2.sort((a,b)=>a-b);
while(p1<n && p2<m){
if(a[p1]<b[p2]) p1++;
else if(a[p1]>b[p2]) p2++;
else{
answer.push(a[p1]);
p1++;
p2++;
}
}
return answer;
}
let a=[1, 3, 9, 5, 2];
let b=[3, 2, 5, 7, 8];
console.log(solution(a, b));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
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));
</script>
</body>
</html>
반응형
'JS 알고리즘 문제풀이 > 섹션 5. 효율성(투포인터 알고리즘, 슬라이딩윈도우, 해쉬)' 카테고리의 다른 글
6.학급 회장(Hash Map) (0) | 2022.06.18 |
---|---|
5.최대 매출(Sliding Window) (0) | 2022.06.17 |
4.연속부분수열2(Two Pointers Algorithm) (0) | 2022.06.16 |
3.연속부분수열1(Two Pointers Algorithm) (0) | 2022.06.15 |
1.두 배열 합치기(Two Pointers Algorithm) (0) | 2022.06.13 |