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개 밖에 없다고 가정하겠습니다.
const twoSum (nums, target) => {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j];
} else {
break;
}
}
}
j = i + 1;
nums = [5, 10, 15, 20, 25] 라고 가정하자
i = 0일때, j는 무조건 1부터 시작하므로
i는 0번째 배열인 숫자 '5'가 되고, j는 '10'이 된다. 그럼 사진처럼 빨간색으로 숫자가 돌게 된다.
i + j의 합이 target과 같지 않으면 계속해서 for문은 돌기 때문에 다음으로 넘어간다. i = 1일때 만약 j = 1이라고 값을 지정하면 사진 속 파랑색처럼 된다.
마지막으로 다음을 체크해보자. i = 2일 때, j는 값을 '1'로 지정하면, 2번째 배열인 15와 1번째 배열인 10을 더한다. 그렇지만 우리는 이미 파랑색을 할 때, 1번째 배열인 숫자 10과 2번째 배열인 15를 더했다. 이미 더한 값을 또 다시 더하는 것이다. 불필요한 일 처리를 할 필요는 없기 때문에 j는 무조건 i보다 1 큰 숫자를 하면 된다.
아래 코드는 우리 팀원이 작성했다. 이 방법으로 작성해도 값이 나온다.
배열을 이미 만들어 놓고, arr.push를 사용해 배열에 값을 넣는다.
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, j)
}
}
}return arr
};
let number = [4, 9, 11, 14, 44, 22];
console.log(twoSum(number, 15))