Skip to content

Commit 082e518

Browse files
committed
week2 2 attempt
1 parent 5f6bc76 commit 082e518

File tree

2 files changed

+141
-1
lines changed

2 files changed

+141
-1
lines changed

β€Ž3sum/Baekwangho.tsβ€Ž

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
/**
2+
합산이 0이 λ˜λŠ” μ„œλ‘œμ†Œ 쑰합을 μ°Ύμ•„μ•Ό ν•œλ‹€.. μ’Œν‘œκ°€ λ‹€λ₯Έ 같은 값은 ν—ˆμš©ν•˜λ˜,
3+
같은 수둜 κ΅¬μ„±λœ 쑰합은 쀑볡을 λΆˆν—ˆν•œλ‹€.
4+
5+
기본적으둜 3κ°€μ§€ 수λ₯Ό 쀑볡없이 μ‘°ν•©ν•΄μ„œ 뽑은 λ‹€μŒ, 정렬을 μ‚¬μš©ν•˜μ—¬ set 으둜 ꡬ뢄할 수 μžˆμ§€ μ•Šμ„κΉŒ?
6+
7+
8+
function threeSum(nums: number[]): number[][] {
9+
const arraySet = new Set<string>();
10+
11+
for (let i = 0; i <= nums.length - 3; i++) {
12+
for (let j = i + 1; j <= nums.length - 2; j++) {
13+
for (let k = j + 1; k <= nums.length - 1; k++) {
14+
if (nums[i] + nums[j] + nums[k] === 0) {
15+
const sorted = [nums[i], nums[j], nums[k]];
16+
sorted.sort((a, b) => a - b);
17+
const string = sorted.join("#");
18+
arraySet.add(string);
19+
}
20+
}
21+
}
22+
}
23+
24+
return Array.from(arraySet).map((el) =>
25+
el.split("#").map((el) => Number(el))
26+
);
27+
}
28+
*/
29+
30+
/**
31+
μ‹œκ°„ μ΄ˆκ³Όν•΄λ²„λ Έλ‹€. μ–΄λ–»κ²Œ 효율적으둜 ν’€ 수 μžˆμ„κΉŒ?
32+
two sum 을 λ³΄λ‹ˆ ν•΄μ‹œν…Œμ΄λΈ”μ„ μ“΄λ‹€κ³  ν•œλ‹€. nums λ₯Ό ν•΄μ‹œν…Œμ΄λΈ”λ‘œ λ³€ν™˜ν•˜κ³ ,
33+
이쀑 λ°˜λ³΅λ¬Έμ—μ„œ 이λ₯Ό ν™œμš©ν•΄λ³΄μž.
34+
35+
function threeSum(nums: number[]): number[][] {
36+
const arraySet = new Set<string>();
37+
const hash = new Map<number, number[]>();
38+
nums.forEach((val, idx) => {
39+
const idxes = hash.get(val);
40+
if (idxes && idxes.length) {
41+
hash.set(val, [...idxes, idx]);
42+
} else {
43+
hash.set(val, [idx]);
44+
}
45+
});
46+
47+
for (let i = 0; i < nums.length - 2; i++) {
48+
for (let j = i + 1; j < nums.length - 1; j++) {
49+
const idxes = hash.get(0 - (nums[i] + nums[j]));
50+
51+
idxes?.forEach((idx) => {
52+
if (idx != i && idx != j) {
53+
const sorted = [nums[i], nums[j], nums[idx]];
54+
sorted.sort((a, b) => a - b);
55+
const string = sorted.join("#");
56+
arraySet.add(string);
57+
}
58+
});
59+
}
60+
}
61+
62+
return Array.from(arraySet).map((el) =>
63+
el.split("#").map((el) => Number(el))
64+
);
65+
}
66+
67+
*/
68+
69+
/**
70+
... 0으둜만 가득찬 λ°°μ—΄μ—μ„œ time limit 이 λ°œμƒν–ˆλ‹€.
71+
풀이λ₯Ό λ³΄κ³ μ˜€λ‹ˆ, μœ„ λ‘œμ§μ—μ„œ 0으둜 가득찬 arraySet 을 μˆœνšŒν•˜λŠ” κ³³μ—μ„œ κ²°κ΅­ O(n^3) 이 λ˜μ–΄λ²„λ¦°λ‹€λŠ” 점을 확인할 수 μžˆμ—ˆλ‹€.
72+
ν™•μ‹€ν•œ 것은, 정렬을 μΆ”κ°€ν–ˆμ„ 경우 μœ„ λ‘œμ§λ„ 톡과 κ°€λŠ₯ν•œ μ •λ„λ‘œ λ§Œλ“€μ–΄λ³Ό 수 μžˆμ§€ μ•Šμ„κΉŒ μ‹Άμ—ˆλ‹€.
73+
74+
function threeSum(nums: number[]): number[][] {
75+
nums.sort((a, b) => a - b);
76+
const arraySet = new Set<string>();
77+
const hash = new Map<number, number[]>();
78+
79+
nums.forEach((val, idx) => {
80+
const idxes = hash.get(val);
81+
if (idxes && idxes.length) {
82+
hash.set(val, [...idxes, idx]);
83+
} else {
84+
hash.set(val, [idx]);
85+
}
86+
});
87+
88+
for (let i = 0; i < nums.length - 2; i++) {
89+
for (let j = i + 1; j < nums.length - 1; j++) {
90+
const idxes = hash.get(0 - (nums[i] + nums[j])) ?? [];
91+
92+
for (let k = 0; k < idxes.length; k++) {
93+
const idx = idxes[k];
94+
if (idx != i && idx != j) {
95+
const sorted = [nums[i], nums[j], nums[idx]];
96+
sorted.sort((a, b) => a - b);
97+
const string = sorted.join("#");
98+
arraySet.add(string);
99+
100+
break;
101+
}
102+
}
103+
}
104+
}
105+
106+
return Array.from(arraySet).map((el) =>
107+
el.split("#").map((el) => Number(el))
108+
);
109+
}
110+
111+
근데 μ–΄λ–»κ²Œλ“  λͺ»λ§Œλ“¦.
112+
*/

β€Žproduct-of-array-except-self/Baekwangho.tsβ€Ž

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ f(1) = f(0) * f(2) * ... * f(n)
1919
f(n-1) = f(0) * ... * f(n-2) * f(n)
2020
2121
λͺ¨λ₯΄κ² λ‹€.. μ˜€λŠ˜μ€ ν•΄μ„€ 보고 내일 κΈ°μ–΅ν•΄μ„œ ν’€μ–΄λ³΄μž
22-
*/
2322
function productExceptSelf(nums: number[]): number[] {
2423
const forward = [nums[0]];
2524
const backward = [nums[nums.length - 1]];
@@ -36,3 +35,32 @@ function productExceptSelf(nums: number[]): number[] {
3635
3736
return result;
3837
}
38+
39+
*/
40+
/**
41+
[λ‘λ²ˆμ§Έ μ‹œλ„]
42+
접근은 λ§žμ•˜λ‹€. κ²°κ΅­ μ œλŒ€λ‘œ μˆ˜μ‹μ„ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” λ“―
43+
μˆ˜μ‹μ„ μž‘μ„±ν•΄λ³΄λ©΄,
44+
forward λŠ” [1, 2, 2*3, 2*3*4]
45+
backward λŠ” [3*4*5, 4*5, 5, 1] κ°€ λ‚˜μ™€μ•Ό ν•œλ‹€.
46+
47+
μ‹œκ°„ λ³΅μž‘λ„: O(2n)
48+
곡간 λ³΅μž‘λ„: O(3n)
49+
*/
50+
51+
function productExceptSelf(nums: number[]): number[] {
52+
const forward = [1]
53+
const backward = [1]
54+
for (let i=0; i<nums.length-1; i++) {
55+
forward.push(nums[i] * forward[i])
56+
backward.push(nums[nums.length-1-i] * backward[i])
57+
58+
}
59+
60+
const result = []
61+
for (let i=0; i<nums.length; i++){
62+
result.push(forward[i] * backward[nums.length-1-i])
63+
}
64+
65+
return result
66+
}

0 commit comments

Comments
Β (0)