[알고리즘] 다중 포인터 패턴: 고유값 세기 (countUniqueValues)

    728x90
    반응형

    [알고리즘] 다중 포인터 패턴: 고유값 세기 (countUniqueValues)

    https://y-chyachya.tistory.com/142

    위의 내용과 같이 다중 포인터나 투 포인터 패턴을 사용해서 해결할 수 있습니다.

    다만 위와 다른것은 처음과 끝에서 가운데로 이동하는게 아닙니다.

    그래도 마찬가지로 두개의 포인터를 사용한다는 것이 관건입니다.

    조건에 따라 두 포인터가 특정 방향으로 이동하도록하고 정해진 배열의 개수를 반환합니다.

     

     

    countUniqueValues([1, 1, 1, 1, 2, 2,]); // 2
    countUniqueValues([]) // 0
    countUniqueValues([1, 2, 3, 4, 5, 6, 6, 6, 8]) // 7

     

     

     

     

    힌트

    위의 설명에 덧붙이자면

    루프를 돌면서 1부터 j는 루프대로 증가한다.

    그러면서 i는 0부터 j와 비교하여 같다면 그대로, 다르다면 +1 증가 시키고 그 자리에 당시의 j 값을 넣어준다.

     [1, 2, 3, 4, 5, 3, 4, 4, 5, 6]

    이런 배열이 만들어지게 된다.

    i의 자리만큼 배열이 고유값으로 만들어지게 됨으로. i까지의 length 즉 i + 1을 리턴해주면 된다.

     

     

     

     

    O(n) 시간 복잡도 해결책

    countUniqueValues(arr) {
    	if (arr.length === 0) return 0;
        let i = 0;
        for (let j = 1; j < arr.length; j++) {
        	if (arr[i] !== arr[j]) {
            	i++;
                arr[i] = arr[j];
            }	
        }
        return i + 1;
    }

     

     

     

     

     

     

    참조!

    https://www.udemy.com/course/best-javascript-data-structures/?couponCode=ST9MT71624

     

    728x90
    반응형

    댓글