[알고리즘] twoSum

이름·2021년 12월 13일
0

알고리즘

목록 보기
1/3

twoSum함수에 숫자배열과 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열

1. 두 개의 for문 중첩

//nums = array
//target = number
const twoSum = function(nums,target) {
    for (let i = 0; i < nums.length; i++) {
      for (let j = 0; j <nums.length; j++) {
        if (nums[i] + nums[j] === target) {
          if (i !== j) {
            return [i, j]
          }
        }
      }
    }
}

point 1
두개의 if 문 중 (i !== j)의 경우가 훨씬 많으므로 시간이 더 오래걸립니다. 따라서 (nums[i] ===nums[j]) 를 먼저 비교하는 것이 유리합니다.

point 2
javascript for문에서는 2개의 변수를 동시에 선언할 수 없습니다. 따라서 i와 j는 따로따로 for 문을 통해 선언해 주어야 합니다.

2. sort method 사용

//nums = array
//target = number
const twoSum = function(nums, target) {
  let sorted = nums.sort (function(a, b) {
    return a- b;
  })
  let low = 0;
  let high = nums.length-1;
  while (high > low) {
     if(sorted[low] + sorted[high] === target) {
       return [low, high];
     } else if (sorted[low] + sorted[high] < target) {
        low ++ ;       
     } else {
       high -- ;
     }
  }
}

point 1
sort 라는 메소드는 array의 순서를 재정렬 후 반환하는 method입니다. sort를 통해 배열을 오름차순, 내림차순 혹은 특정 밸류를 기준으로 크거나 작은 값만 리턴하거나, 문자열인 경우 유니코드 코드 포인트 순서로 정렬할 수도 있습니다.
point 2
이때, return값은 복사한 새로운 array가 아닌 원래의 array를 바꾸는 것임으로 주의하세요.
point 3
while문은 조건이 참인 경우 계속 반복됩니다. <-for문의 활용과 차이를 주의하세요.
point 4
로직에 주의하세요. low와 high의 값이 타겟값보다 크다면 high 값을 하나씩 빼주어야 합니다. 반면 low와 high 값이 타겟보다 작다면 low값을 하나씩 올려주어야 합니다.
while이 반복되는 동안 총 3가지의 경우를 반복하게 되는 것입니다. 타겟과 같은 경우는 리턴을 하지만, 타겟보다 작거나 크다면 로우나 하이값이 변하는 형태로요!

navigated by 가윤님

0개의 댓글

Powered by GraphCDN, the GraphQL CDN