Skip to content

Commit 575eb87

Browse files
authored
Merge pull request DaleStudy#694 from HerrineKim/main
[HerrineKim] Week 1
2 parents b6649b8 + 14a128c commit 575eb87

File tree

5 files changed

+129
-0
lines changed

5 files changed

+129
-0
lines changed

โ€Žcontains-duplicate/HerrineKim.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
2+
3+
/**
4+
* @param {number[]} nums
5+
* @return {boolean}
6+
*/
7+
var containsDuplicate = function (nums) {
8+
const seen = new Set();
9+
for (let num of nums) {
10+
if (seen.has(num)) {
11+
return true; // ์ค‘๋ณต ๋ฐœ๊ฒฌ
12+
}
13+
seen.add(num);
14+
}
15+
return false; // ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๊ณ ์œ 
16+
};
17+

โ€Žhouse-robber/HerrineKim.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
2+
3+
/**
4+
* @param {number[]} nums
5+
* @return {number}
6+
*/
7+
var rob = function (nums) {
8+
const n = nums.length;
9+
if (n === 0) return 0;
10+
if (n === 1) return nums[0];
11+
12+
// DP ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
13+
let prev2 = 0; // dp[i-2]
14+
let prev1 = 0; // dp[i-1]
15+
16+
// ์ตœ๋Œ€ ์ˆ˜์ต ๊ณ„์‚ฐ
17+
for (let num of nums) {
18+
const current = Math.max(prev1, prev2 + num);
19+
prev2 = prev1;
20+
prev1 = current;
21+
}
22+
23+
return prev1;
24+
};
25+
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
2+
3+
/**
4+
* @param {number[]} nums
5+
* @return {number}
6+
*/
7+
var longestConsecutive = function (nums) {
8+
// Set์„ ์‚ฌ์šฉํ•ด ์ค‘๋ณต ์ œ๊ฑฐ
9+
const numSet = new Set(nums);
10+
let longestStreak = 0;
11+
12+
// ๊ฐ ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ฐ์† ์‹œํ€€์Šค๋ฅผ ํƒ์ƒ‰
13+
for (let num of numSet) {
14+
// num์ด ์‹œํ€€์Šค์˜ ์‹œ์ž‘์ ์ธ ๊ฒฝ์šฐ๋งŒ ํƒ์ƒ‰
15+
if (!numSet.has(num - 1)) {
16+
let currentNum = num;
17+
let currentStreak = 1;
18+
19+
// ํ˜„์žฌ ์‹œํ€€์Šค๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๊ธธ์ด ๊ณ„์‚ฐ
20+
while (numSet.has(currentNum + 1)) {
21+
currentNum++;
22+
currentStreak++;
23+
}
24+
25+
// ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์—…๋ฐ์ดํŠธ
26+
longestStreak = Math.max(longestStreak, currentStreak);
27+
}
28+
}
29+
30+
return longestStreak;
31+
};
32+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
2+
3+
/**
4+
* @param {number[]} nums
5+
* @param {number} k
6+
* @return {number[]}
7+
*/
8+
var topKFrequent = function (nums, k) {
9+
// ๋นˆ๋„ ๊ณ„์‚ฐ
10+
const frequencyMap = new Map();
11+
for (let num of nums) {
12+
frequencyMap.set(num, (frequencyMap.get(num) || 0) + 1);
13+
}
14+
15+
// ๋ฒ„ํ‚ท ์ •๋ ฌ
16+
const bucket = Array(nums.length + 1).fill(null).map(() => []);
17+
for (let [num, freq] of frequencyMap) {
18+
bucket[freq].push(num);
19+
}
20+
21+
// ๋นˆ๋„ ๋†’์€ ์š”์†Œ๋“ค ์ถ”์ถœ
22+
const result = [];
23+
for (let i = bucket.length - 1; i >= 0 && result.length < k; i--) {
24+
if (bucket[i].length > 0) {
25+
result.push(...bucket[i]);
26+
}
27+
}
28+
29+
return result.slice(0, k); // ์ƒ์œ„ k๊ฐœ์˜ ์š”์†Œ ๋ฐ˜ํ™˜
30+
};
31+

โ€Žvalid-palindrome/HerrineKim.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
2+
3+
/**
4+
* @param {string} s
5+
* @return {boolean}
6+
*/
7+
var isPalindrome = function (s) {
8+
// ์ „์ฒ˜๋ฆฌ - ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋งŒ ๋‚จ๊ธฐ๊ณ  ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜
9+
const cleanString = s.toLowerCase().replace(/[^a-z0-9]/g, "");
10+
11+
// ์–‘ ๋์—์„œ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ•˜๋ฉฐ ํ™•์ธ
12+
let left = 0, right = cleanString.length - 1;
13+
14+
while (left < right) {
15+
if (cleanString[left] !== cleanString[right]) {
16+
return false; // ๋Œ€์นญ์ด ๊นจ์ง€๋ฉด false
17+
}
18+
left++;
19+
right--;
20+
}
21+
22+
return true; // ๋Œ€์นญ์ด ์œ ์ง€๋˜๋ฉด true
23+
};
24+

0 commit comments

Comments
ย (0)