특정 수의 Index 구하기

군밤먹으면서코딩·2021년 6월 21일
0

알고리즘

목록 보기
7/14
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 되어야 합니다.

풀이

const twoSum = (nums, target) => {
  // 아래 코드를 작성해주세요.
  let arr = [];
  for(let i =0;i<nums.length;i++){
    for(let j = i+1;j<nums.length;j++){
      if(nums[i] + nums[j] === target){
        arr.push(i);
        arr.push(j);
      }
    }
  }
  return arr;
}
  • 이중 for문을 활용해 하나 하나 값을 확인하는 방식을 사용.

더 좋은 풀이(?)

for (i = 0; i < nums.length; i++) {
    if(nums.indexOf(target-nums[i]) != -1) {
      return [i, nums.indexOf(target-nums[i])];
    }
  }
const twoSum = (nums, target) => {
  let result = [];
  const subArr = nums.map(num => target - num);
  const intersection = nums.filter(num => subArr.includes(num));
  intersection.forEach(num => result.push(nums.indexOf(num)))
  return result;
}
  • 팀원분들 중 이중 for문을 사용하지 않고 푸신 분이 계셔서 코드를 보여달라 요청드렸다 ㅎㅎ;;

  • for문을 돌면서 target의 수를 빼 인덱스를 찾는 방법은 내가 생각지 못한 부분이고, 2중 for문도 아니기 때문에 좋은 풀이 같아 기록해 두려 한다.

  • 두 번째 코드 역시 동기 분 중 한분이 작성해주셨는데, map, filter, includes 등 프로젝트에서도 유용하게 사용할 수 있을 것 같은 메서드들을 많이 활용하셨다.( 나두 이런 쌈박한 코드로 문제를 풀고싶다ㅎㅎ 💨)

  • 이렇게 코드 카타를 하면서 다른 사람들의 코드도 볼 수 있어 매일매일 진행한다면 유익한 시간이 될 수 있을것 같다.

0개의 댓글