[알고리즘] 다중 포인터 패턴 (Multiple Pointers)

728x90
반응형

[알고리즘] 다중 포인터 패턴 (Multiple Pointers)

 

이 패턴은 인덱스나 위치를 나타내는 포인터나 값을 설정한 다음, 특정 조건에 따라 중간 지점에서 시작하거나 끝 지점을 향해 이동하는 것을 의미합니다.

결국, 배열이나 문자열 같은 선형 구조나, 이중 연결 리스트 또는 단일 연결 리스트 같은 구조를 다루는 방법입니다.

핵심은 한 쌍의 값이나 조건을 만족시키는 것을 찾는다는 개념입니다.

대부분의 경우, 한 쌍의 값을 찾게 됩니다.

 

 

문제

 

오름차순으로 정렬된 배열이 주어집니다.

이 배열에서 합계가 0인 첫 번째 쌍을 찾아야 합니다

즉, 배열에서 두 숫자를 찾아 그 합이 0이 되도록 하는 쌍을 찾는 함수입니다.


  
sumZero([-3, -2, -1, 0, 1, 2, 3]); // [-3, 3]
sumZero([-2, 0, 1, 3]); // undefined
sumZero([1, 2, 3]); // undefined

 

 

 

 

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

시간 복잡도 = O( n^2 )

공간 복잡도 = O(1)


  
function sumZero(arr){
for(let i = 0; i < arr.length; i++){
for(let j = i+1; j < arr.length; j++){
if(arr[i] + arr[j] === 0){
return [arr[i], arr[j]];
}
}
}
}
sumZero([-4,-3,-2,-1,0,1,2,5]); // [-2, 2]

 

 

 

 

 

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

시간 복잡도 = O( n )

공간 복잡도 = O(1)


  
function sumZero(arr) {
let left = 0;
let right = arr.length -1;
while (left < right) {
let sum = arr[left] + arr[right];
if (sum === 0) {
return [arr[left], arr[right]];
} else if (sum > 0) {
right--;
} else {
left++;
}
}
}

 

 

 

 

 

참조!

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

 

728x90
반응형

댓글