WeCode Kata Day 1

luneah·2021년 11월 29일
0

WeCode Kata

목록 보기
1/20
post-thumbnail

문제

twoSum 함수에 숫자 배열과 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index 를 배열에 담아 return 하라.

nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열

예를 들어, nums 는 [4, 9, 11, 14], target 은 13이라고 할 때 nums[0] + nums[1] = 4 + 9 = 13 이므로 [0, 1]이 return 되어야 한다.

# 가정
target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다고 가정한다.

Thinking Algorithm

  1. target은 목표 숫자
  2. nums의 숫자 중 더해서 target이 되는 두 숫자 찾아야 함
    • How? for문으로 nums를 차례로 순환하며 해당 두 숫자 찾기
      2-1. nums[0]과 nums[1], nums[2], nums[3] 차례로 순환
      2-2. 맞는 조합 없으면 nums[1]과 nums[2], nums[3] 차례로 순환
      2-3. 맞는 조합 없으면 nums[2]와 nums[3] 차례로 순환
  3. 2를 실행한 후 그 두 숫자의 index를 찾아서 반환

Code

const twoSum = (nums, target) => {
  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];
      }
    }
  }
};

다른 풀이 방법

  1. 나머지 = target - nums[i], 나머지를 for문에서 nums[j]로 설정하여 찾아준다. (성공)
const twoSum = (nums, target) => {
  for(let i=0; i<nums.length; i++) {
  	let remainder = target - nums[i];
    for(let j=0; j<nums.length; j++) {
      if (nums[j] === remainder) {
        let result = [i, j];
        return result;
      }
    }
  }
};
  1. filter 속성으로 nums에서 target 보다 큰 숫자 제외해주고 그 숫자들로 for문 돌리기 (실패)
    Why? filter 속성을 사용하여 setNum이라는 새로운 변수에 담아주었는데 왜 undefined로 뜰까?
const twoSum = (nums, target) => {
   let setNum = nums.filter(num => num < target); // 이 부분에서 undefined 발생
   for(let i=0; i<setNum.length; i++) {
      for(let j=0; j<setNum.length; j++) {
        if (setNum[i] + setNum[j] === target) {
          let n1 = nums.indexOf(setNum[i])
          let n2 = nums.indexOf(setNum[j])
          return [n1, n2];
        }
      }
    }
};
profile
하늘이의 개발 일기

0개의 댓글