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는 지원하지 않는 브라우저가 많은 메서드이다) 메서드 사용시 호환성을 꼭 고려하여 사용하여야겠다.