Code Kata Day 1

SYhwang·2023년 1월 16일
0

코드카타

목록 보기
1/10

문제

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개 밖에 없다고 가정하겠습니다.)

풀이

// 1번 방법
const twoSum = (nums, target) => {
    for(i=0; i<nums.length; i++) {
      for(j=0; j<nums.length; j++) {
       if ( nums[i] + nums[j] === target ) {
          if ( i !== j ) {
            return [i, j];
        }
      }
    }
  }
}
  • 배열의 index를 이용해 forif로 이루어진 간단한 이중 반복문과 조건문으로 해결했다.
  • nums [i] + nums [j] === target일 때, 인덱스 번호인 i 와 j 가 서로 같지 않은 경우라면 [i, j]를 리턴한다.
// 2번 방법
const twoSum = (nums, target) => {
  let a = nums.findIndex(num => nums.includes(target - num));
  let b = nums.findLastIndex(num => nums.includes(target - num));

  return [a, b];
}
  • 처음에는 for문 대신 filter()includes() 메소드를 이용해 target에서 num을 뺀 값이 배열에 있다면 return 하려고 했다. 그러나 filter는 배열의 인덱스가 아닌 배열의 값으로 이루어진 배열을 반환하는 것을 발견하여 findIndexfindLastIndex 메소드를 이용하였다.
  • vscode에서는 정상적으로 동작하였으나 raplit에서는 findIndex is not a function 오류가 발생하는 결과가 나왔다. (findIndexfindLastIndex는 지원하지 않는 브라우저가 많은 메서드이다) 메서드 사용시 호환성을 꼭 고려하여 사용하여야겠다.

0개의 댓글