Two Sum from leetcode(Javascript)

JellyChoco·2020년 6월 25일
0
post-thumbnail
post-custom-banner
Given an array of integers, return indices of the two numbers such that
they add up to a specific target.

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

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

var twoSum = function(nums, target) {

     
};

함수의 인풋으로 nums라는 배열이 주어지고, 그 배열의 2개의 인덱스의 값들을 더해서
target이라는 숫자가 나오면 그 해당하는 인덱스를 배열에 담아 리턴하는 문제이다.

풀이1.

var twoSum = function(nums, target) {
  
 //eazy단계의 문제라 단순하게 생각해서 2중 for문을 사용해서
for(let i=0; i<nums.length; i++){
  for(let j=0; j<nums.length; j++){
      if(nums[i]+nums[j]===target){
      return [i , j] 
    }
   }
  }
}
Runcode해보니 통과하길래 되겠구나! 별생각없이 submit을 눌렀더니

주어진 배열을 중복적으로 값을 더해서 리턴하기 때문에
target이 4라면
[0,0]return되어버린다.
배열은 한개가 주어졌는데, 내가 임의로 하나의 배열을 더 만든 셈이다.
그래서 틀렸다.

풀이2.

하지만 이중포문을 사용해야 하는건 맞는 것 같아서
i와 j의 값을 서로 겹치지만 않게 하면 될것 같아서 조건을 하나 중첩해서 주었다.
var twoSum = function(nums, target) {
  
 //eazy단계의 문제라 단순하게 생각해서 2중 for문을 사용해서
for(let i=0; i<nums.length; i++){
  for(let j=0; j<nums.length; j++){
    if(i!==j){
      if(nums[i]+nums[j]===target){
      return [i , j] 
     }
    }
   }
  }
}
이렇게 하니 통과하였고,
이중for문은 시간복잡도가 좋지않아 reduce로 해볼까 하다가
리턴하는게 인덱스라 그냥 진행했다.
profile
코린이? 개린이!
post-custom-banner

0개의 댓글