[LeetCode] Two Sum (JS)

nRecode·2020년 12월 24일
0

Algorithm

목록 보기
19/48

문제

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

입출력 예
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].

접근

nums의 요소 2개의 합이 target의 수가 되도록 해야하기 때문에 이중 for문으로 모든 경우의 수를 구하고 인덱스를 return하는 방법을 이용한다. 근데 같은 요소를 두번 반복하면 안되기 때문에 i와 j가 같으면 무시한다.

풀이

var twoSum = function(nums, target) {
    for(let i = 0; i < nums.length; i++){
        for(let j = 0; j < nums.length; j++){
            if((i!==j) && (nums[i] + nums[j] === target)){
                console.log(i,j)
                return [i,j];
            }
        }
    }   
};

시간 복잡도는 O(n*n)으로 예상된다.

추가

for문을 한번 사용하여 하는 방법이 있었다.
이는 따로 객체를 생성하는데 target과 nums[i]를 뺀 값이 이미 객체의 키값으로 들어가 있으면 nums[i]와 그 객체의 키 값의 합이 target이 됨을 의미히기 때문에 이를 이용하는 방법이다.

var twoSum = function(nums, target) {
  const obj = {};
    for(let i = 0; i < nums.length; i++){
        const minus = target - nums[i];
        
        if(minus in obj){
            return [obj[minus],i];
        }
        obj[nums[i]] = i;
        console.log(obj)
    }
    return null;

};

시간 복잡도는 O(n)으로 예상된다.

그러나 if의 조건문을 minus in obj 대신 obj[minus]로 했을때 Runtime err가 나오는데 그 이유를 모르겠다...
->input:[2,7,11,15] 9인 테스트 케이스에서 obj[minus]의 value값이 인덱스 이므로 0이 들어갈 수 있는데,
if에서 조건문으로 인덱스인 0이 들어갈 경우에 false이기 때문에 err가 발생하는 것이었다 ㅜㅜ

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글