Skip to content

Commit f04849b

Browse files
authored
Merge pull request #653 from mike2ox/main
[mike2ox] Week1
2 parents 895165f + a8796b3 commit f04849b

File tree

5 files changed

+124
-0
lines changed

5 files changed

+124
-0
lines changed

โ€Žcontains-duplicate/mike2ox.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Source: https://leetcode.com/problems/contains-duplicate/
3+
* ํ’€์ด๋ฐฉ๋ฒ•: Set์„ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ
4+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
5+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
6+
*
7+
* ์ƒ๊ฐ๋‚˜๋Š” ํ’€์ด๋ฐฉ๋ฒ•
8+
* 1. ๋‹จ์ˆœํ•˜๊ฒŒ sorted๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด์ „๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ
9+
* 2. ์ •๋ ฌํ•˜์ง€ ์•Š๊ณ  nums์˜ ๊ธธ์ด๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์ €์žฅํ•˜๋ฉด์„œ ํ™•์ธ
10+
*/
11+
function containsDuplicate(nums: number[]): boolean {
12+
// ์ค‘๋ณต๋œ ๊ฐ’์ด ์—†๋Š” ์ž๋ฃŒ๊ตฌ์กฐ Set ํ™œ์šฉ
13+
const set = new Set<number>(nums);
14+
// Set์˜ size์™€ nums์˜ length๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ
15+
return set.size !== nums.length;
16+
}

โ€Žhouse-robber/mike2ox.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Source: https://leetcode.com/problems/house-robber/
3+
* ํ’€์ด๋ฐฉ๋ฒ•: DP๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง‘์„ ํ„ธ ๋•Œ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•จ
4+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
5+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
6+
*
7+
* ์ƒ๊ฐ๋‚˜๋Š” ํ’€์ด๋ฐฉ๋ฒ•
8+
*/
9+
function rob(nums: number[]): number {
10+
if (nums.length === 0) return 0;
11+
if (nums.length === 1) return nums[0];
12+
if (nums.length === 2) return Math.max(nums[0], nums[1]);
13+
14+
let prev = nums[0];
15+
let maxResult = Math.max(nums[0], nums[1]);
16+
let current = 0;
17+
18+
// ๋‚จ์€ ์ง‘์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•จ
19+
for (let i = 2; i < nums.length; i++) {
20+
current = Math.max(maxResult, prev + nums[i]);
21+
prev = maxResult;
22+
maxResult = current;
23+
}
24+
return maxResult;
25+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* Source: https://leetcode.com/problems/longest-consecutive-sequence/
3+
* ํ’€์ด๋ฐฉ๋ฒ•: ์ •๋ ฌ ํ›„ ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ์—ฐ์†๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ
4+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(nlogn)
5+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
6+
*
7+
* ์ƒ๊ฐ๋‚˜๋Š” ํ’€์ด๋ฐฉ๋ฒ•
8+
*/
9+
10+
function longestConsecutive(nums: number[]): number {
11+
if (nums.length === 0) return 0;
12+
const sorted = nums.sort((a, b) => a - b);
13+
let prev = sorted[0];
14+
let result = 1;
15+
let candiResult = 1;
16+
17+
for (let current of sorted) {
18+
if (prev === current) continue;
19+
if (current === prev + 1) {
20+
candiResult += 1;
21+
} else {
22+
if (candiResult > result) {
23+
result = candiResult;
24+
}
25+
candiResult = 1;
26+
}
27+
prev = current;
28+
}
29+
30+
if (candiResult > result) result = candiResult;
31+
return result;
32+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* Source: https://leetcode.com/problems/top-k-frequent-elements/
3+
* ํ’€์ด๋ฐฉ๋ฒ•: ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅ, Object.entries๋ฅผ ํ†ตํ•ด ์ •๋ ฌํ•˜์—ฌ k๊ฐœ๊นŒ์ง€ ๋ฐ˜ํ™˜
4+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(nlogn)
5+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
6+
*
7+
* ์ƒ๊ฐ๋‚˜๋Š” ํ’€์ด๋ฐฉ๋ฒ•
8+
*/
9+
function topKFrequent(nums: number[], k: number): number[] {
10+
const KFrequentObject = new Object();
11+
const result = new Array();
12+
for (let num of nums) {
13+
if (!Object.hasOwn(KFrequentObject, num)) KFrequentObject[num] = 0;
14+
KFrequentObject[num]++;
15+
}
16+
// Object.entries๋ฅผ ํ†ตํ•ด key, value๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ (ํฌ์ธํŠธ)
17+
let sorted = Object.entries(KFrequentObject).sort((a, b) => b[1] - a[1]);
18+
for (let node of sorted) {
19+
result.push(parseInt(node[0]));
20+
}
21+
return result.slice(0, k);
22+
}

โ€Žvalid-palindrome/mike2ox.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Source: https://leetcode.com/problems/valid-palindrome/
3+
* ํ’€์ด๋ฐฉ๋ฒ•: ๋ฌธ์ž์—ด์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ •์ œํ•œ ํ›„ reverseํ•˜์—ฌ ๋น„๊ต
4+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
5+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
6+
*
7+
* ์ƒ๊ฐ๋‚˜๋Š” ํ’€์ด๋ฐฉ๋ฒ•
8+
* 1. ์ •๊ทœ์‹์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์ •์ œํ•œ ํ›„ reverseํ•˜์—ฌ ๋น„๊ต => ์ •๊ทœ์‹ ์ž‘์„ฑ์„ ๋ชปํ•ด์„œ ๋ฐฐ์ œ
9+
* 2. ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์ž๋งŒ ๋ฐฐ์—ด์— ์ €์žฅํ•œ ํ›„ reverseํ•˜์—ฌ ๋น„๊ต
10+
*/
11+
function isPalindrome(s: string): boolean {
12+
// ๋ฏธ๋ฆฌ ๊ธธ์ด๊ฐ€ 2๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋Š” true๋กœ ๋ฐ˜ํ™˜(Palindrome ์กฐ๊ฑด์— ๋งž์Œ)
13+
if (s.length < 2) return true;
14+
const formatted: string[] = [];
15+
16+
// ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์ž๋งŒ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฐฐ์—ด์— ์ €์žฅ
17+
for (let c of s) {
18+
if (
19+
(c >= "a" && c <= "z") ||
20+
(c >= "A" && c <= "Z") ||
21+
(c >= "0" && c <= "9")
22+
)
23+
formatted.push(c.toLowerCase());
24+
}
25+
// formatted ๋ฐฐ์—ด์„ reverseํ•˜์—ฌ JSON.stringify๋กœ ๋น„๊ต (์ค‘์š”)
26+
// ? toReverse()๊ฐ€ chrome console์—์„œ๋Š” ์ž‘๋™ํ•˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” ์™œ ์•ˆ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Œ
27+
const reversed = [...formatted].reverse();
28+
return JSON.stringify(reversed) === JSON.stringify(formatted);
29+
}

0 commit comments

Comments
ย (0)