본문 바로가기

IT공부/Algorithm

투 포인터 기법

728x90
// 다음의 배열에서, 합이 x인 연속 부분배열의 개수를 구하라
// arr = [ 1, 3, 6, 5, 2, 7, 9 ],  x = 9 
function countSubArrSumOfX(arr, x) {
  let count = 0;
  let sum = 0;
  let left = 0;
  let right = 0;
  while(right <= arr.length){
    if(sum === x){
      count++
      sum -= arr[left]
      left++
    }else if( sum < x){
      sum += arr[right]
      right++
    }else if( sum > x){
      sum -= arr[left]
      left++
    }
  }
  return count;
}
console.log(countSubArrSumOfX([1, 3, 6, 5, 2, 7, 9], 9))



// 다음의 배열에서(정렬된), 두개의 원소의 합이 x와 같은지를 확인하고, 그렇다면 각각원소의 인덱스를 반환하라. 
// arr = [ 2, 4, 5, 7, 11, 15 ],  x = 15 
function twoSumSorted(arr, x) {
  let left = 0;
  let right = arr.length - 1
  while(left < right){
    let sum = arr[left] + arr[right]
    if(sum === x){
      return [left, right]
    }else if( sum < x){
      left++
    }else if( sum > x){
      right--
    }
  }
  return [-1, -1]
}
console.log(twoSumSorted([2, 4, 5, 7, 11, 15], 15))
728x90

'IT공부 > Algorithm' 카테고리의 다른 글

[Binary Search] 이진탐색  (0) 2023.11.10
[Linear Search] 선형 탐색  (0) 2023.11.09
[Linked List] 연결리스트  (0) 2023.11.07
Big-O 표기법  (0) 2023.11.06
DFS 깊이 우선 탐색  (0) 2023.11.05