코드노트

자바스크립트 배열 문제 풀이 - 배열 내 두 값 == 합 본문

Code note/자바스크립트 알고리즘 문제풀이

자바스크립트 배열 문제 풀이 - 배열 내 두 값 == 합

코드노트 2022. 8. 23. 21:33

ex ) [ 2, 7, 11, 15 ], 13]

2, 7, 11, 15 의 배열 중에서 2개를 더하여 13이 나오는 값의 인덱스를 반환해야하는 문제이다.

 

이러한 문제는 풀어본적이 있어서 그렇게 어렵지 않았다.

 

1. 이중for문을 통해서 13이 되는 값들을 찾기만 하면 되는 문제였다.

  for (let i = 0; i < nums.length; i++) {
    for (let j = i + 1; j < nums.length; j++) {
      if (nums[i] + nums[j] == target) {
        return [i, j];
      }
    }
  }

- 이렇게 이중 for문을 통해서 작성하게 되면 시간적합도는 O(n^2)이다.

- for문 하나로는 어떻게 풀어야할까?

 

 

- map을 이용해서 하는 방법

let nums = [ 2, 7, 11, 15 ]
let target = [ 13 ]

let map = {}; // key, velue

  for (let i = 0; i < nums.length; i++) {
    if (map[target - nums[i]] != undefined) {
      return [map[target - nums[i]], i];
    }

    map[nums[i]] = i;
  }

- map을 이용해서 하는 방법

- map[target - num[ i ] != undfind)

0 : target(13) - nums[ 0 ]( 2 ) != undefind / 가 맞으므로 map[ nums [ 0 ]( 2 )] = i (0) 을 넣어준다. { 2 : 0 }

1 : target(13) - nums[ 1 ]( 7 ) != undefind / 가 맞으므로 map[ nums [ 7 ]( 2 )] = i (1) 을 넣어준다. { 7 : 1 }

현재map 에는 2와 7이 있다. { 2: 0, 7 : 1 }

2 : target(13) - nums[ 2 ]( 11 ) != undefind / 가 아니다.

13에서 11을 뺀 값인 2가 map 에 있으므로 11, 2 로 target에 만족하는 두 인덱스 값인 0, 2 가 출력 된다.