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
를 이용해 for
와 if
로 이루어진 간단한 이중 반복문과 조건문으로 해결했다.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
는 배열의 인덱스가 아닌 배열의 값으로 이루어진 배열을 반환하는 것을 발견하여 findIndex
와 findLastIndex
메소드를 이용하였다. findIndex
와 findLastIndex
는 지원하지 않는 브라우저가 많은 메서드이다) 메서드 사용시 호환성을 꼭 고려하여 사용하여야겠다.