주어진 숫자의 합이 되는 두 숫자가 있는지 확인

이 기사에서는 일반적인 JavaScript 인터뷰 알고리즘에 대한 솔루션에 대해 설명합니다.

// In an unsorted array, check whether 
// there are any two numbers that will 
// sum up to a given number. Example:

// sumFinder([6, 4, 3, 2], 9) = true 
// (because 6 + 3 equals 9.)

// sumFinder([6, 4, 3, 2], 2) = false 
// (because nothing in the array plus 
// another number in the array equals 2.) 


자바스크립트 구현




function sumFinder(arr, num) {
  let obj = {}
  let diff

  for (let i = 0; i < arr.length; i++) {
    diff = num - arr[i]

    if (obj[diff]) {
      return true
    } else {
      obj[arr[i]] = true
    }
  }
  return false
}

let sumFinderResult = sumFinder([6, 4, 3, 2], 7)
// returns true

let anotherSumFinderResult = sumFinder([6, 4, 3, 2], 1)
// returns false


솔루션에 대한 간단한 설명



함수의 지정된 대상 번호(인수 목록에서 자체적으로 제공한 번호)와 배열의 요소 간의 차이가 배열의 다른 요소와 같으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

솔루션에 대한 자세한 설명


  • 배열의 각 요소에 대해 주어진 숫자(인수 목록에서 자체적으로 제공한 숫자)와 배열의 현재 요소 간의 차이를 가져옵니다.
  • 현재 요소를 키로 개체에 넣습니다.
  • 배열의 요소(객체의 키가 있는 경우)가 주어진 숫자와 새 현재 요소의 차이와 일치하면 true를 반환합니다.
  • 그렇지 않으면 false를 반환합니다.

  • 구체적인 숫자를 사용하는 솔루션의 예


    sumFinder가 [6, 4, 3, 2]의 배열과 7이라는 두 개의 매개변수로 호출되었다고 가정해 보겠습니다.

    sumFinder([6, 4, 3, 2], 7)
    


    먼저 위의 코드 구현에 따라 빈 객체가 생성되고 diff 변수가 선언됩니다. 그런 다음 배열의 각 인덱스를 반복하는 for 루프가 생성됩니다. 첫 번째 인덱스는 6 를 가리킵니다. 라인:

    diff = num - arr[i]
    


    이제 번역:

    diff = 7 - 6
    // diff is now assigned 1
    


    1의 키가 아직 객체에 존재하지 않기 때문에 arr[i] 또는 6를 객체에 키로 삽입합니다.

    이제 두 번째 루프 반복에서 num7입니다(num는 절대 변경되지 않음). arr[i]4 이므로 diff3 입니다. 3는 아직 객체의 키가 아니므로 arr[i] 또는 4를 객체의 키로 추가합니다.

    세 번째 루프 반복에서 num7 , arr[i]3 , 따라서 diff4 입니다. 이번에는 4 가 객체의 키이므로 true 를 반환합니다. 배열에 주어진 숫자( 3 )로 합산되는 두 개의 숫자( 47 )가 있음을 성공적으로 파악했기 때문에 true를 반환합니다.

    좋은 웹페이지 즐겨찾기