twoSum함수에 숫자배열과 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
예시
nums은 [4, 9, 11, 14] target은 13
nums[0] + nums[1] = 4 + 9 = 13 이죠?
그러면 [0, 1]이 return 되어야 합니다.
let i =0;
const arr = [];
while(i !=-1){
let j = nums.indexOf(target-nums[i]);
if(nums[i] +nums[j] === target) {
arr.push(i);
arr.push(j);
}
i++;
return arr
}
테스트 케이스에서 if 조건을 아예 읽지 못했다. deep equality가 아니라는 오류가 나왔다.
run js에서는 정상적으로 나왔는데 말이다..💦
🍌짝궁의 첫번째 풀이
let i;
let result;
nums.forEach(num => {
i = target - num
if (num!= -1) {
result = num
return(nums.indexOf(i), nums.indexOf(result))
}
})
역시 오류, forEach문으로 배열 순회하는 것이 더 간단한 코드라고 판단되어 짝궁의 코드를 토대로 코드를 수정하였다.
📌수정내용
1. if 문 내의 조건 수정
-나의 경우 i를 인덱스로 변수를 주었는데, 짝궁의 경우 i를 nums의 각 요소 값 , 즉 nums[idx] 로 주었기 떄문에 nums.indexOf(i) 로 조건을 변경하였고,
2. 우리가 출력해야할 반환값은 배열인데 배열에 대한 선언이 없었기에,
새로운 배열을 생성해서 배열의 인덱스0과 1값에 각각 target을 더하면 나오는 인자로 바꿨다.
let i;
let result;
let newArr = [];
nums.forEach(num => {
i = target - num
if (nums.indexOf(i) != -1) {
result = num
newArr[0] = nums.indexOf(i)
newArr[1] = nums.indexOf(result)
}
})
return(newArr)
테스트 케이스 조건을 모두 만족하며 정상적으로 출력된다.
const arr = [];
for(let i=0; i<nums.length; i++){
for(let j=0; j<nums.length; j++){
if(nums[i] + nums[j] === target) {
arr[0] = i;
arr[1] = j;
return arr;
}
}
}
중첩 for문을 통해 구현, i와 j의 인덱스 활용