DAY1-Two Sum[Level: Easy]

김보람's avatar
Dec 31, 2025
DAY1-Two Sum[Level: Easy]

리디의 페어프로그래밍 세션을 준비하며 해당 날짜까지 하루에 알고리즘문제 2개씩 풀며 머리를 좀 풀어보려고 한다.
알고리즘은 정말정말 자신없는데 협업은 진짜 알잘딱깔센으로 자신있기에 포기하지 않고 해보려고 한다 해보고 안되면 뭐… 뭐 타일시공이나 배워야지


문제. Two Sum

일단 한글지원이 안되어 눈물꾹참고 크롬으로 번역 돌려서 이해해 보면

문제이해.

정수 배열 nums와 정수 target을 줄거다
nums의 요소중 각기 다른 요소 둘을 더해서 합이 target이 되는 요소의 인덱스를 리턴해라

떠오른 아이디어.

요소하나를 기준으로 돌고 없으면 또 돌고 해서 모든 요소를 더해본다.

즉, 밖으로한번 돌고 안에서도 한번씩 돌아 중첩으로 반복해서 구하는 방법이다

시간 복잡도는 잘 모르지만 두번 반복하면 그만큼 리소스가 들긴 할거다

그럼 바깥쪽 반복을 한번만 돌고 이미 돈 값들을 기억하면서
반복을 돌고있는 현재의 내가 타겟이 되려면 필요한 값을 기억속에서 바로 얻을 수 있다면 반복이 한번만 도니까 아마 다 도는것보단 시간 복잡도가 적지 않을 까 싶다

코드.

var twoSum = function(nums, target) {
    const map = {}

    for(let i = 0; i < nums.length; i++) {
        let current = nums[i]
        let need = target - current

        if(map[need] !== undefined){
            return [i, map[need]]
        }
        map[current] = i
    }
    
};

twoSum([2,7,11,15],9)
  1. num인 [2,7,11,15]의 요소를 반복한다

  2. 현재의 요소가 target이 되려면 필요한 값을 구하고

  3. 필요한값이 map에 있으면 해당 값과 현재 나의 인덱스를 리턴한다

  4. 필요한 값이 map에 없다면 돌고있는 나를 key로 나의 인덱스를 value로 map에 저장한다

이렇게 되면 중첩으로 반복하지 않아도 제값을 리턴할 수 있다

조금 모지랐던건 map[need] !== undefined 이 조건문 난 값이 있을때를 조건으로 하기에 if(map[need])로 하고 넘어가면 될지 알았는데 실패하는 항목이 있었다

이유는 if의 조건은 펄시한 값이냐 트루시한 값이냐를 판단한다는거다 즉 0이 들어오면 false임 즉 값이 있음에도 없는것처럼 조건을 통과하지 못하게 되어 undefined드인가를 비교해야했다

Share article

김보람 | 930802qhfka@gmail.com