Skip to content

Commit feaa599

Browse files
committed
two-sum O(n) 풀이 완료
1 parent 3b9560e commit feaa599

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

two-sum/highball.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const twoSum = function (nums, target) {
2+
/* -------------------------------------------------------------------------- */
3+
/* target/2인 element가 2개 있을 경우 early return */
4+
/* -------------------------------------------------------------------------- */
5+
let indices = [];
6+
for (let i = 0; i < nums.length; i++) {
7+
if (nums[i] === target / 2) indices.push(i);
8+
if (indices.length === 2) break;
9+
}
10+
11+
if (indices.length === 2) return indices;
12+
13+
/* -------------------------------------------------------------------------- */
14+
/* absDNums[i] === absDNums[j]인 경우 */
15+
/* -------------------------------------------------------------------------- */
16+
17+
indices = []; //indices 초기화
18+
19+
const dNums = nums.map((num) => num - target / 2); //nums의 각 값을 target/2 값과의 편차들로 변환
20+
const absDNums = dNums.map(Math.abs); //dNumbs의 각 값에 절댓값 취해주기
21+
22+
const uniqueAbsDNums = new Map(); //uniqueAbsDNums은 absDNums의 각 값을 key 값으로 하고 그 key의 부호를 boolean으로 변환한 값을 value로 갖는 map임
23+
let j;
24+
for (let i = 0; i < absDNums.length; i++) {
25+
if (
26+
uniqueAbsDNums.has(absDNums[i]) && //앞에 나온 수들 중 하나와 절댓값이 같은 수 등장 (absDNums[i])
27+
dNums[i] > 0 != uniqueAbsDNums.get(absDNums[i]) //절댓값이 같은 이유가 앞에 나온 수들 중 하나와 아예 같은 값이어서가 아니라 부호만 반대인 수이기 때문이라는 것 체크 (두 수가 target/2로 같았다면 이 조건으로 걸러져 버리기 때문에 앞에서 early return하길 잘했음)
28+
) {
29+
j = i;
30+
break;
31+
}
32+
uniqueAbsDNums.set(absDNums[i], dNums[i] > 0);
33+
}
34+
35+
for (let i = 0; i < absDNums.length; i++) {
36+
// j index 앞에 나오는, absDNums[j]와 같은 절댓값을 가지는 수 찾기(위 for문에서 j를 찾은 방식 덕분에 이 수는 absDNums[j]와 절댓값은 같지만 부호는 반대인 수일 것임)
37+
if (absDNums[i] === absDNums[j]) {
38+
indices.push(i);
39+
indices.push(j);
40+
break;
41+
}
42+
}
43+
return indices;
44+
};

0 commit comments

Comments
 (0)