/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
const twoSum = function(nums, target) {
result = []
for(let i=0; i<nums.length; i++) {
for (let j=i+1; j<nums.length; j++) {
if(target === nums[i] + nums[j]) {
result.push(i,j)
return result
}
}
}
}
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
const twoSum = function(nums, target) {
const table = new Map(); // 값을 저장시킬 테이블 생성
for(let i=0; i<nums.length; i++) {
// 현재 값에서 타겟 값을 충족시키기 위한 숫자를 구한다.
let curNum = target - nums[i]
// 만약 table에 충족시켜주는 값이 있다면 현재 인덱스와 해당 값의 인덱스를 반환한다.
if(table.has(nums.indexOf(curNum))) {
return [i, nums.indexOf(curNum)]
}
table.set(i, nums[i])
}
}
참고
arr.indexOf(값) - 값의 인덱스를 알려준다.
map.set(k,v) - 맵의 key와 value를 저장한다.
map.has(k) - key의 존재여부를 알려준다. (true/false)
Brute Force 방법을 생각했을 때는 풀이 방법이 매우 쉽다고 생각했다.
하지만 LeetCode의 Follow-up 도발로 좀 더 파고드니 Hash Table를 이용한 방법이 있다는 걸 배웠다.
문제에서 제공하는 test case 범위가 작아 시간 복잡도라는 개념이 크게 다가오진 않았다. 하지만 나중에 숫자가 커졌을 때는 체감할 수 있을 정도의 시간 차가 생기겠지? 그런 상황을 대비해 이렇게 자료 구조 공부를 하며 준비해놓고 있어야겠다!