JavaScript/JS_Algorithm

[인프런 - JS 알고리즘 문제풀이] Array 문제

느리지만 꾸준하게 2021. 8. 5. 17:33

Two Pointers Algorithm

  • list의 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 Algorithm
  • 정렬되어있는 두 개의 list의 합집합에도 사용된다. merge sort의 conquer 영역에서 기초가 된다.

즉 정렬된 list를 두 개의 포인터를 이용해서 순차적으로 접근하면서 두 포인터 구간의 값이 target 값과 같을 때까지 

포인터를 조작하는 것이다.

 

두 개의 포인터를 활용하면 list를 한 번만 탐색하므로 list가 이미 정렬되어져 있는 경우 O(n), 정렬되어 있지 않아도 O(nlogn) 정도 time complexity로 문제를 해결 할 수 있다. 그러므로 주어진 입력 데이터가 클 경우에는 투 포인터를 활용할 수 있는지를 꼭 생각해보자.

 

two pointer

 

 

 

 

arr1의 p1과 arr2의 p2라는 배열에서 누가 더 작냐 비교해서 작은 것을 answer에 push하면 된다.

push된 쪽의(p1이나 p2) 포인터는 한칸 증가해서 다시 비교를 진행한다.

한 쪽 배열이 다 탐색이 되면 남은 지역쪽의 것 들을 쭉 집어넣는다.

 

아래코드를 참고하자.

<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;
            while (p1 < n && p2 < m) {
                if (arr1[p1] <= arr2[p2]) answer.push(arr1[p1++]);
                else answer.push(arr2[p2++]);
            }
// arr1이 남았다 or arr2가 남았다면
            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));
    </script>
</body>

</html>

 

 

<출처 : 자바스크립트 알고리즘 문제풀이(코딩테스트 대비): 김태원>

참고: https://www.inflearn.com/course/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4/dashboard

 

자바스크립트 알고리즘 문제풀이(코딩테스트 대비) - 인프런 | 강의

자바스크립트(JavaScript)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 재미있게 풀 수 있는 기초 단계 문제부터 고급 알고리즘까지 단계별로 차근차근 배우도록 설계된 강좌입니다., 개발

www.inflearn.com

https://butter-shower.tistory.com/226

 

[Algorithm] 투포인터(Two Pointer) 알고리즘

알고리즘 문제를 풀다보면 종종 나오는 투포인터 알고리즘! 막 꼬여가지고 ㅋㅋㅋ 저도 중간에 제대로 못짜고 그러는 경우가 많은데요, 많은 코딩테스트 문제에 등장하는 것은 아니지만 잊을만

butter-shower.tistory.com

https://velog.io/@adorno10/%ED%88%AC-%ED%8F%AC%EC%9D%B8%ED%84%B0-Two-Pointer

 

투 포인터 (Two Pointer)

정렬된 리스트를 두 개의 포인터를 이용해 순차적으로 접근하면서 두 포인터 구간의 값이 타겟 값과 같을 때 까지 포인터를 조작하는 기법을 말한다. 두 개의 포인터를 함께 활용할 때 얻을 수

velog.io