Skip to content

Commit

Permalink
Merge pull request #800 from Yjason-K/main
Browse files Browse the repository at this point in the history
[gomgom22] Week3
  • Loading branch information
SamTheKorean authored Dec 29, 2024
2 parents d754bb7 + a2ac1b0 commit 03ded85
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 0 deletions.
53 changes: 53 additions & 0 deletions 3sum/Yjason-K.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/**
* ์„ธ ์ˆ˜์˜ ํ•ฉ์ด 0์ด ๋˜๋Š” ๋ชจ๋“  ๊ณ ์œ ํ•œ ์กฐํ•ฉ์„ ์ฐพ๋Š” ํ•จ์ˆ˜
*
* @param {number[]} nums - ์ •์ˆ˜ ๋ฐฐ์—ด
* @returns {number[][]} - ์„ธ ์ˆ˜์˜ ํ•ฉ์ด 0์ด ๋˜๋Š” ์กฐํ•ฉ ๋ฐฐ์—ด
*
* 1. ์ž…๋ ฅ ๋ฐฐ์—ด `nums`๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ.
* 2. ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ `ํˆฌ ํฌ์ธํ„ฐ(two-pointer)`๋ฅผ ์ด์šฉํ•ด ์กฐํ•ฉ์„ ํƒ์ƒ‰.
* 3. ์ค‘๋ณต ์กฐํ•ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `Set`์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ์กฐํ•ฉ์˜ ๋ฌธ์ž์—ด์„ ์ €์žฅ.
* 4. ์กฐ๊ฑด์— ๋งž๋Š” ์กฐํ•ฉ์„ `result` ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
*
* ์‹œ๊ฐ„ ๋ณต์žก๋„:
* - ์ •๋ ฌ: O(n log n)
* - ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ ๋ฐ ํˆฌ ํฌ์ธํ„ฐ: O(n^2)
* - ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n^2)
*
* ๊ณต๊ฐ„ ๋ณต์žก๋„:
* - `Set` ๋ฐ `result` ๋ฐฐ์—ด์— ์ €์žฅ๋˜๋Š” ๊ณ ์œ  ์กฐํ•ฉ: O(k), k๋Š” ๊ณ ์œ ํ•œ ์กฐํ•ฉ์˜ ์ˆ˜
* - ์ „์ฒด ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n + k)
*/
function threeSum(nums: number[]): number[][] {
const sumSet = new Set<string>();
const result: number[][] = [];
nums.sort((a, b) => a - b);

// ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ ์ˆ˜ํ–‰
for (let i = 0; i < nums.length - 2; i++) {
// ์ •๋ ฌ ๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์ž‘์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๊ฐ’ ์ค‘๋ณต ๋น„๊ต
if (i > 0 && nums[i] === nums[i - 1]) continue;

let start = i + 1, end = nums.length - 1;
while (start < end) {
const sum = nums[i] + nums[start] + nums[end];
if (sum > 0) {
end--;
} else if (sum < 0) {
start++;
} else {
const triplet = [nums[i], nums[start], nums[end]];
const key = triplet.toString();
if (!sumSet.has(key)) {
sumSet.add(key);
result.push(triplet);
}
start++;
end--;
}
}
}

return result;
}

38 changes: 38 additions & 0 deletions product-of-array-except-self/Yjason-K.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ์ž์‹ ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์˜ ๊ณฑ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
*
* @param {number[]} nums - ์ •์ˆ˜ ๋ฐฐ์—ด
* @returns {number[]} - ๊ฐ ์ธ๋ฑ์Šค์˜ ์š”์†Œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์˜ ๊ณฑ์„ ๊ตฌํ•œ ๋ฐฐ์—ด
*
* 1. ๊ฒฐ๊ณผ ๋ฐฐ์—ด `result`๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”.
* 2. ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ `left` ๊ฐ’์„ ์ด์šฉํ•ด ๊ธฐ์ค€ idx ์ด์ „์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ `result`์— ์ €์žฅ.
* 3. ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ `right` ๊ฐ’์„ ์ด์šฉํ•ด ์ ‘๋ฏธ ๊ธฐ์ค€ idx ์ดํ›„์˜ ๊ฐ’๋“ค์„ ๊ณ„์‚ฐ ํžˆ์•ผ `result`์— ๊ณฑํ•จ.
* 4. ๊ฒฐ๊ณผ ๋ฐฐ์—ด `result`๋ฅผ ๋ฐ˜ํ™˜.
*
* ์‹œ๊ฐ„ ๋ณต์žก๋„:
* - ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ์ˆœํšŒ: O(n)
* - ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ ์ˆœํšŒ: O(n)
* - ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
*
* ๊ณต๊ฐ„ ๋ณต์žก๋„:
* - ์ถ”๊ฐ€ ๋ฐฐ์—ด ์—†์ด ์ƒ์ˆ˜ ๊ณต๊ฐ„ ์‚ฌ์šฉ (result๋Š” ๋ฌธ์ œ์˜ ์š”๊ตฌ ์กฐ๊ฑด์— ํฌํ•จ๋˜์ง€ ์•Š์Œ).
* - ์ „์ฒด ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
*/
function productExceptSelf(nums: number[]): number[] {
const numLength = nums.length;
const result = new Array(numLength).fill(1);

let left = 1;
for (let i = 0; i < numLength; i++) {
result[i] *= left;
left *= nums[i];
}

let right = 1;
for (let i = numLength; i >= 0; i--) {
result[i] *= right;
right *= nums[i];
}

return result;
}
22 changes: 22 additions & 0 deletions reverse-bits/Yjason-K.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* ์ฃผ์–ด์ง„ ์ •์ˆ˜๋ฅผ 32๋น„ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฐ˜์ „์‹œ์ผœ ๊ทธ๋•Œ์˜ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ.
*
* @param {number} n - ์ •์ˆ˜ (32๋น„ํŠธ))
* @returns {number} - 2์ง„์ˆ˜ ๋ณ€ํ™˜ ๋ฐ ๋ฐ˜์ „ํ•˜์—ฌ ์ •์ˆ˜ ๋ณ€ํ™˜.
*
* ๋‚ด์žฅ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 32๋น„ํŠธ 2์ง„์ˆ˜ ๋ณ€ํ™˜ ํ›„, reverseํ•˜์—ฌ ๋‹ค์‹œ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜.
*
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(32)
* - 32๋น„ํŠธ ์ •์ˆ˜์˜ ๋น„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๊ณ ์ •๋œ ์ƒ์ˆ˜ ์‹œ๊ฐ„.
*
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(32)
* - 2์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜์ „๋œ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๋ฏ€๋กœ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”.
*/
function reverseBits(n: number): number {
// ์ˆซ์ž๋ฅผ 32๋น„ํŠธ 2์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ (์•ž์— 0 ์ฑ„์šฐ๊ธฐ)
const binaryStr = n.toString(2).padStart(32, '0');
// 2์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๊ธฐ
const reversedBinaryStr = binaryStr.split('').reverse().join('');
// ๋’ค์ง‘ํžŒ 2์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜
return parseInt(reversedBinaryStr, 2);
};
25 changes: 25 additions & 0 deletions two-sum/Yjason-K.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ๋‘ ์ˆซ์ž์˜ ํ•ฉ์ด target์ด ๋˜๋Š” idx ์Œ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
* - ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
* - ํ•œ๋ฒˆ์˜ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ Map์— ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , Map์—์„œ ๊ฐ’์„ ์ฐพ์Œ
* - ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
* - ์ˆซ์ž์™€ ๊ทธ๋•Œ์˜ idx๋ฅผ ์Œ์œผ๋กœํ•˜๋Š” Map
*
* @param {number[]} nums - ์ˆซ์ž ๋ฐฐ์—ด
* @param {number} target - ํƒ€๊ฒŸ ํ•ฉ
* @returns {number[]} - ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” idx ๋ฐฐ์—ด
*/
function twoSum(nums: number[], target: number): number[] {
const map = new Map<number, number>();
for (let i = 0; i < nums.length; i++) {
const cur = nums[i]; // ํ˜„์žฌ ๊ฐ’
const reamin = target - cur; // ๋‚˜๋จธ์ง€
if (map.has(reamin)) {
// Non-null assertion operator(!)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ undefined๊ฐ€ ์•„๋‹˜์„ ๋‹จ์–ธ
return [map.get(reamin)!, i];
}
// ๋‚˜๋จธ์ง€๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ํ˜„์žฌ ๊ฐ’์„ ์ €์žฅ
map.set(cur, i);
}
return []; // ๋ชฉํ‘œ ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋นˆ ๋ฐฐ์—ด ๋ฐ˜ํ™˜
}

0 comments on commit 03ded85

Please sign in to comment.