twoSum 함수에 숫자 배열과 '특정 수'를 인자로 넘기면,
더해서 '특정 수'가 나오는 index를 배열에 담아 return 하세요.
- 가정 : target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다
const twoSum = (nums, target) => { // 1번 let result=[]; // 2번 for (let i = 0; i<nums.length ; i++){ // 3번 for (let v = i+1; v<nums.length; v++){ if (nums[i]+ nums[v] === target) { return result = [i,v]; // 4번 } } } }
target으로 보내는 합계의 조합이 2개라고 했던 가정이 있어
같은 인덱스끼리의 값이 중복해서 더해지지 않도록 for문에 중첩을 주어 문제를 해결했다.
변수 설정을 i 와 v로 설정해 인덱스에 동시에 같은 것에 접근하지 못하도록 막아주었다.
codekata를 하는 다른 조의 해결문을 보고
다른 방법으로도 접근이 가능하다는 것을 알게되었다.
const twoSum = (nums, target) => { let arr=[]; for(i=0; i<nums.length; i++){ if(nums.indexOf(target-nums[i])!==-1){ arr.push(i); } } return arr; }
string.indexOf()
는 string 에서 주어진 값과 일치하는 첫번째 인덱스를 반환하고,
일치하는 값이 없다면 -1을 반환하는데,
if를 이용해 그 성질을 이용해 target 에서 각 인덱스의 값을 빼고
남은 인덱스 중 일치하는 값이 있다면 새로 만든 배열에 넣고,
아니면 반복문을 수행하는 방식으로 해당 문제를 풀어냈다.
아무래도 현재는 주어진 배열의 갯수가 적었기 때문에
반복문 중첩을 통해서도 빠른 계산이 나올 수 있겠지만,
배열안의 데이터가 많다면 이 부분에서 속도의 차이가 있을 수 있겠다.
조금 더 고민해 보는 습관을 가져야겠다.