[Code Kata] JavaScript #1

ojae kwon·2021년 4월 26일
0
  1. 문제

    • '숫자 배열'(nums)과 '특정 수'(target)를 인자로 받아 배열의 숫자 중 합이 '특정 수'가 되는 두 숫자의 index 를 배열로 return 하는 'twoSum' 함수를 구현하시오.

  1. 문제 해결 방법 구상

    1) (target - 배열 내 숫자1) === 배열 내 숫자2 의 조건을 만족 할때 숫자1, 2의 index 값을 배열로 리턴해야 겠다.

    2) 배열 내의 모든 숫자를 조건문에 넣어야 하므로 반복문도 써야겠다.

    3) 배열 내 숫자 2개의 합이 target과 일치하는지를 찾아야하는데, 이를 위해서 이중 반복문을 써야 겠다.

    4) 이렇게 하니, 결과 값이 2개가 나옴 ex) target 이 13 이라 가정 했을 때, 4+9와 9+4 인경우가 모두 조건에 부합하여 값이 4개짜리 배열이 리턴됨. 이를 해결 하기위해 return 을 써서 첫번째 결과가 나오는 즉시 함수를 종료


  2. 코드 작성

const twoSum = (nums, target) => {				
  for (let i = 0; i < nums.length; i++) {		// 여기서 숫자1 고정
    for (let t = 0; t < nums.length; t++) {		// 숫자1을 제외한 배열의 나머지 숫자 반복
      if (nums[i] + nums[t] === target) {		// 숫지1+나머지 숫자 = target 인지
        return [i, t]        				// 조건에 부합시 두 숫자의 index값 배열로 리턴
      }  
    }   
  }
}

  1. 작성 후 알게 된 점

    1) 함수 내의 return 은 위치가 어디가 되었건 간에 해당 함수를 종료 시킨다.
    2) break는 자신을 포함한 반복문만을 종료시킨다.


  1. 같은 결과를 내는 더 효율이 좋은 코드
var twoSum = function(nums, target) {
  numsIndexes = {}; // key : 차이값(숫자), value: index(인덱스)
  for (let i = 0; i < nums.length; i ++) {
    let currentDifference = target - nums[i];
    if (numsIndexes[currentDifference] !== undefined && numsIndexes[currentDifference] !== i) {
      return [i, numsIndexes[currentDifference]];
    } else {
      numsIndexes[nums[i]] = i;
    }
  }
};

0개의 댓글