Skip to content

Commit 03ded85

Browse files
authored
Merge pull request #800 from Yjason-K/main
[gomgom22] Week3
2 parents d754bb7 + a2ac1b0 commit 03ded85

File tree

4 files changed

+138
-0
lines changed

4 files changed

+138
-0
lines changed

โ€Ž3sum/Yjason-K.ts

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* ์„ธ ์ˆ˜์˜ ํ•ฉ์ด 0์ด ๋˜๋Š” ๋ชจ๋“  ๊ณ ์œ ํ•œ ์กฐํ•ฉ์„ ์ฐพ๋Š” ํ•จ์ˆ˜
3+
*
4+
* @param {number[]} nums - ์ •์ˆ˜ ๋ฐฐ์—ด
5+
* @returns {number[][]} - ์„ธ ์ˆ˜์˜ ํ•ฉ์ด 0์ด ๋˜๋Š” ์กฐํ•ฉ ๋ฐฐ์—ด
6+
*
7+
* 1. ์ž…๋ ฅ ๋ฐฐ์—ด `nums`๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ.
8+
* 2. ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ `ํˆฌ ํฌ์ธํ„ฐ(two-pointer)`๋ฅผ ์ด์šฉํ•ด ์กฐํ•ฉ์„ ํƒ์ƒ‰.
9+
* 3. ์ค‘๋ณต ์กฐํ•ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `Set`์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ์กฐํ•ฉ์˜ ๋ฌธ์ž์—ด์„ ์ €์žฅ.
10+
* 4. ์กฐ๊ฑด์— ๋งž๋Š” ์กฐํ•ฉ์„ `result` ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
11+
*
12+
* ์‹œ๊ฐ„ ๋ณต์žก๋„:
13+
* - ์ •๋ ฌ: O(n log n)
14+
* - ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ ๋ฐ ํˆฌ ํฌ์ธํ„ฐ: O(n^2)
15+
* - ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n^2)
16+
*
17+
* ๊ณต๊ฐ„ ๋ณต์žก๋„:
18+
* - `Set` ๋ฐ `result` ๋ฐฐ์—ด์— ์ €์žฅ๋˜๋Š” ๊ณ ์œ  ์กฐํ•ฉ: O(k), k๋Š” ๊ณ ์œ ํ•œ ์กฐํ•ฉ์˜ ์ˆ˜
19+
* - ์ „์ฒด ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n + k)
20+
*/
21+
function threeSum(nums: number[]): number[][] {
22+
const sumSet = new Set<string>();
23+
const result: number[][] = [];
24+
nums.sort((a, b) => a - b);
25+
26+
// ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ ์ˆ˜ํ–‰
27+
for (let i = 0; i < nums.length - 2; i++) {
28+
// ์ •๋ ฌ ๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์ž‘์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๊ฐ’ ์ค‘๋ณต ๋น„๊ต
29+
if (i > 0 && nums[i] === nums[i - 1]) continue;
30+
31+
let start = i + 1, end = nums.length - 1;
32+
while (start < end) {
33+
const sum = nums[i] + nums[start] + nums[end];
34+
if (sum > 0) {
35+
end--;
36+
} else if (sum < 0) {
37+
start++;
38+
} else {
39+
const triplet = [nums[i], nums[start], nums[end]];
40+
const key = triplet.toString();
41+
if (!sumSet.has(key)) {
42+
sumSet.add(key);
43+
result.push(triplet);
44+
}
45+
start++;
46+
end--;
47+
}
48+
}
49+
}
50+
51+
return result;
52+
}
53+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ์ž์‹ ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์˜ ๊ณฑ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
3+
*
4+
* @param {number[]} nums - ์ •์ˆ˜ ๋ฐฐ์—ด
5+
* @returns {number[]} - ๊ฐ ์ธ๋ฑ์Šค์˜ ์š”์†Œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์˜ ๊ณฑ์„ ๊ตฌํ•œ ๋ฐฐ์—ด
6+
*
7+
* 1. ๊ฒฐ๊ณผ ๋ฐฐ์—ด `result`๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”.
8+
* 2. ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ `left` ๊ฐ’์„ ์ด์šฉํ•ด ๊ธฐ์ค€ idx ์ด์ „์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ `result`์— ์ €์žฅ.
9+
* 3. ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ `right` ๊ฐ’์„ ์ด์šฉํ•ด ์ ‘๋ฏธ ๊ธฐ์ค€ idx ์ดํ›„์˜ ๊ฐ’๋“ค์„ ๊ณ„์‚ฐ ํžˆ์•ผ `result`์— ๊ณฑํ•จ.
10+
* 4. ๊ฒฐ๊ณผ ๋ฐฐ์—ด `result`๋ฅผ ๋ฐ˜ํ™˜.
11+
*
12+
* ์‹œ๊ฐ„ ๋ณต์žก๋„:
13+
* - ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ์ˆœํšŒ: O(n)
14+
* - ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ ์ˆœํšŒ: O(n)
15+
* - ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
16+
*
17+
* ๊ณต๊ฐ„ ๋ณต์žก๋„:
18+
* - ์ถ”๊ฐ€ ๋ฐฐ์—ด ์—†์ด ์ƒ์ˆ˜ ๊ณต๊ฐ„ ์‚ฌ์šฉ (result๋Š” ๋ฌธ์ œ์˜ ์š”๊ตฌ ์กฐ๊ฑด์— ํฌํ•จ๋˜์ง€ ์•Š์Œ).
19+
* - ์ „์ฒด ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
20+
*/
21+
function productExceptSelf(nums: number[]): number[] {
22+
const numLength = nums.length;
23+
const result = new Array(numLength).fill(1);
24+
25+
let left = 1;
26+
for (let i = 0; i < numLength; i++) {
27+
result[i] *= left;
28+
left *= nums[i];
29+
}
30+
31+
let right = 1;
32+
for (let i = numLength; i >= 0; i--) {
33+
result[i] *= right;
34+
right *= nums[i];
35+
}
36+
37+
return result;
38+
}

โ€Žreverse-bits/Yjason-K.ts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* ์ฃผ์–ด์ง„ ์ •์ˆ˜๋ฅผ 32๋น„ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฐ˜์ „์‹œ์ผœ ๊ทธ๋•Œ์˜ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ.
3+
*
4+
* @param {number} n - ์ •์ˆ˜ (32๋น„ํŠธ))
5+
* @returns {number} - 2์ง„์ˆ˜ ๋ณ€ํ™˜ ๋ฐ ๋ฐ˜์ „ํ•˜์—ฌ ์ •์ˆ˜ ๋ณ€ํ™˜.
6+
*
7+
* ๋‚ด์žฅ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 32๋น„ํŠธ 2์ง„์ˆ˜ ๋ณ€ํ™˜ ํ›„, reverseํ•˜์—ฌ ๋‹ค์‹œ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜.
8+
*
9+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(32)
10+
* - 32๋น„ํŠธ ์ •์ˆ˜์˜ ๋น„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๊ณ ์ •๋œ ์ƒ์ˆ˜ ์‹œ๊ฐ„.
11+
*
12+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(32)
13+
* - 2์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜์ „๋œ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๋ฏ€๋กœ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”.
14+
*/
15+
function reverseBits(n: number): number {
16+
// ์ˆซ์ž๋ฅผ 32๋น„ํŠธ 2์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ (์•ž์— 0 ์ฑ„์šฐ๊ธฐ)
17+
const binaryStr = n.toString(2).padStart(32, '0');
18+
// 2์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๊ธฐ
19+
const reversedBinaryStr = binaryStr.split('').reverse().join('');
20+
// ๋’ค์ง‘ํžŒ 2์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜
21+
return parseInt(reversedBinaryStr, 2);
22+
};

โ€Žtwo-sum/Yjason-K.ts

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ๋‘ ์ˆซ์ž์˜ ํ•ฉ์ด target์ด ๋˜๋Š” idx ์Œ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
3+
* - ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
4+
* - ํ•œ๋ฒˆ์˜ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ Map์— ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , Map์—์„œ ๊ฐ’์„ ์ฐพ์Œ
5+
* - ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
6+
* - ์ˆซ์ž์™€ ๊ทธ๋•Œ์˜ idx๋ฅผ ์Œ์œผ๋กœํ•˜๋Š” Map
7+
*
8+
* @param {number[]} nums - ์ˆซ์ž ๋ฐฐ์—ด
9+
* @param {number} target - ํƒ€๊ฒŸ ํ•ฉ
10+
* @returns {number[]} - ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” idx ๋ฐฐ์—ด
11+
*/
12+
function twoSum(nums: number[], target: number): number[] {
13+
const map = new Map<number, number>();
14+
for (let i = 0; i < nums.length; i++) {
15+
const cur = nums[i]; // ํ˜„์žฌ ๊ฐ’
16+
const reamin = target - cur; // ๋‚˜๋จธ์ง€
17+
if (map.has(reamin)) {
18+
// Non-null assertion operator(!)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ undefined๊ฐ€ ์•„๋‹˜์„ ๋‹จ์–ธ
19+
return [map.get(reamin)!, i];
20+
}
21+
// ๋‚˜๋จธ์ง€๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ํ˜„์žฌ ๊ฐ’์„ ์ €์žฅ
22+
map.set(cur, i);
23+
}
24+
return []; // ๋ชฉํ‘œ ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋นˆ ๋ฐฐ์—ด ๋ฐ˜ํ™˜
25+
}

0 commit comments

Comments
ย (0)