그때 그 시절 알게됀 바탕으로 적는 알고리즘 문제풀이 입니다.
nums: 숫자 배열이고
target은 두 수를 더해서 나올 수 있는 합계이다.
return에서 두 수의 index를 가진 숫자 배열이 나와야한다.
먼저 nums라는 배열이 [4, 9, 11, 14] 이라고 가정하에
target은 결과값이 13이 나와야 한다면....
0자리는 4, 1자리는 9, 2자리는 11, 3자리는 14라고 생각을 먼저하게 될꺼다.
nums[0] + nums[1] = 4 + 9 = 13 이라고 생각을 할수 있다.
예를들어 target이 15라고 하면 nums[0] + nums[2]라고 생각해야한다.
또 한번 target이 20을 요구한다면 nums[1] + nums[2]이니까
그러면 요구하는 13이 나오려면 [0, 1]이 리턴값으로 나와야하는데
여기서 생각을 해보자
(나는 그때 이문제를 풀지 못했다. 옆에 지민님 통해서 풀게 되었고 이 기억을 언제든 꺼내고 싶어서 적게 되었다.)
for문으로 생각해볼수 있는게 0부터 자리수 까지 생각을 해보면 보통 for문으로
for (let i = 0; i<nums.length; i++)이라고 생각할수 있다.
i값이 0부터 3까지 0,1,2,3 순서로 지나가는데
만약에 0이 지나갔다면 nums[0]은 4이고 나머지는 nums[?]에서 물음표는 숫자9가 나와야 합이 13이되는건데...
데.. 여기서 nums[?]값을 j라고 생각해보자
그럼 i문처럼 for (let j = 0; j<nums.length; j++)로 동일하게
j[0]이라고 하면 4인데 합이 13이 나와야해서 숫자9가 나와야한다.
결국 i는 0,1,2,3 / j도 0,1,2,3 이 결과값이 도출되어야하는데
return값을 [i, j]라고 한다면
수없이 0,0/0,1/0,3/1,2/1,3/2,1 등등 이렇게 리턴이 계속돌수도 있다 결국
target이 13을 요구했다면 4+9 = 즉 i는 [0] j는 [1]가 되었을떄
리턴을 도출하고 true값을 나타내기때문에 이 값은 마무리가 됀다.
for (let i = 0; i<nums.length; i++){
for (let j = 0; j<nums.length; j++){
if (nums[i]+nums[j]=== numbers) {
return [i, j]
}
}
}
}
console.log(twoSum([4, 9, 11, 14],15)) 여기서 target 이 15라고 한다면 4+11이기 때문에 결과는 [0,2]
target이 13이라면 [0,1] 이다.