문제
문제 해결 방법 구상
1) (target - 배열 내 숫자1) === 배열 내 숫자2 의 조건을 만족 할때 숫자1, 2의 index 값을 배열로 리턴해야 겠다.
2) 배열 내의 모든 숫자를 조건문에 넣어야 하므로 반복문도 써야겠다.
3) 배열 내 숫자 2개의 합이 target과 일치하는지를 찾아야하는데, 이를 위해서 이중 반복문을 써야 겠다.
4) 이렇게 하니, 결과 값이 2개가 나옴 ex) target 이 13 이라 가정 했을 때, 4+9와 9+4 인경우가 모두 조건에 부합하여 값이 4개짜리 배열이 리턴됨. 이를 해결 하기위해 return 을 써서 첫번째 결과가 나오는 즉시 함수를 종료
코드 작성
const twoSum = (nums, target) => {
for (let i = 0; i < nums.length; i++) { // 여기서 숫자1 고정
for (let t = 0; t < nums.length; t++) { // 숫자1을 제외한 배열의 나머지 숫자 반복
if (nums[i] + nums[t] === target) { // 숫지1+나머지 숫자 = target 인지
return [i, t] // 조건에 부합시 두 숫자의 index값 배열로 리턴
}
}
}
}
작성 후 알게 된 점
1) 함수 내의 return 은 위치가 어디가 되었건 간에 해당 함수를 종료 시킨다.
2) break는 자신을 포함한 반복문만을 종료시킨다.
var twoSum = function(nums, target) {
numsIndexes = {}; // key : 차이값(숫자), value: index(인덱스)
for (let i = 0; i < nums.length; i ++) {
let currentDifference = target - nums[i];
if (numsIndexes[currentDifference] !== undefined && numsIndexes[currentDifference] !== i) {
return [i, numsIndexes[currentDifference]];
} else {
numsIndexes[nums[i]] = i;
}
}
};