Skip to content

Commit d1dc9b7

Browse files
authored
Merge pull request #670 from mmyeon/main
[mallayon] Week 1
2 parents ced8e07 + 71aadcb commit d1dc9b7

File tree

5 files changed

+180
-0
lines changed

5 files changed

+180
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
6+
/**
7+
*
8+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ•
9+
* - Set ๊ฐ์ฒด ์‚ฌ์šฉํ•ด์„œ ์ˆซ์ž ์ค‘๋ณต ์ œ๊ฑฐํ•˜๊ธฐ
10+
* - ์›๋ณธ ๋ฐฐ์—ด๊ณผ ๊ธธ์ด ๋น„๊ตํ•˜๊ธฐ
11+
*
12+
* ์‹œ๊ฐ„๋ณต์žก๋„ :
13+
* - ๋ฐฐ์—ด ์ˆœํšŒํ•ด์„œ ์š”์†Œ Set์— ์‚ฝ์ž… : O(n)
14+
* - Set์˜ ์‚ฌ์ด์ฆˆ ํฌ๊ธฐ ๋น„๊ต : O(1)
15+
*
16+
* ๊ณต๊ฐ„๋ณต์žก๋„ :
17+
* - Set์— ์œ ๋‹ˆํฌํ•œ ์ˆซ์ž ์ €์žฅ : O(n)
18+
*/
19+
20+
var containsDuplicate = function (nums) {
21+
return new Set(nums).size !== nums.length;
22+
};

โ€Žhouse-robber/mmyeon.jsโ€Ž

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
*
3+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• : dp ์‚ฌ์šฉ
4+
* - ๋ฐฐ์—ด ๊ธธ์ด๊ฐ€ 1๊ฐœ ์ผ๋•Œ๋Š” ์ฒซ ๋ฒˆ์จฐ ๊ฐ’ ๋ฆฌํ„ดํ•˜๊ณ , 2๊ฐœ๋ฉด ๋” ํฐ ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
5+
* - 3๊ฐœ ๋ถ€ํ„ฐ๋Š” ๋ฐ”๋กœ ์˜†์ง‘ ๊ฐ’์— ํ˜„์žฌ์ง‘ ๊ฐ’์„ ๋”ํ•œ ๊ฐ’๊ณผ ์˜†์˜†์ง‘์˜ ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ํฐ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.
6+
* - ๋‹ค์Œ ์ง‘ ๊ฐ’์— ํ˜„์žฌ๊นŒ์ง€์˜ ๊ฐ’ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋ฐ”๋กœ ์˜†์ง‘, ์˜†์˜†์ง‘ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค.
7+
* - ํ˜„์žฌ ๊ฐ’์ด ์ €์žฅ๋œ ์˜†์ง‘๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
8+
*
9+
* ์‹œ๊ฐ„๋ณต์žก๋„ :
10+
* - ์ฃผ์–ด์ง„ ์ˆซ์ž ๋ฐฐ์—ด ๊ธธ์ด๋งŒํผ 1ํšŒ ์ˆœํšŒํ•˜๋‹ˆ๊นŒ O(n)
11+
*
12+
* ๊ณต๊ฐ„๋ณต์žก๋„ :
13+
* - ์˜†์ง‘๊ณผ ์˜†์˜†์ง‘ ๊ฐ’์„ 2๊ฐœ์˜ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด์•ผํ•˜๋‹ˆ๊นŒ O(1)
14+
*
15+
*/
16+
/**
17+
* @param {number[]} nums
18+
* @return {number}
19+
*/
20+
var rob = function (nums) {
21+
if (nums.length === 1) return nums[0];
22+
if (nums.length === 2) return Math.max(nums[0], nums[1]);
23+
24+
let prevPrevHouse = nums[0];
25+
let prevHouse = Math.max(nums[0], nums[1]);
26+
27+
for (let i = 2; i < nums.length; i++) {
28+
const current = Math.max(prevHouse, prevPrevHouse + nums[i]);
29+
prevPrevHouse = prevHouse;
30+
prevHouse = current;
31+
}
32+
33+
return prevHouse;
34+
};
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
*
3+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
4+
* - ์ค‘๋ณต ์ˆซ์ž ์ œ๊ฑฐํ•œ ๋’ค, ์ˆซ์ž ์ˆœํšŒํ•˜๋ฉด์„œ ์—ฐ์† ์ˆซ์ž์˜ ์‹œ์ž‘ ์ง€์ ์ธ์ง€ ์ฒดํฌ
5+
* - ๋” ์ž‘์€ ์ˆซ์ž๊ฐ€ ์—†์œผ๋ฉด ํ˜„์žฌ ์ˆซ์ž๊ฐ€ ์—ฐ์† ์ˆซ์ž์˜ ์‹œ์ž‘ ์ง€์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ์†๋œ ๋‹ค์Œ ํฐ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌ
6+
* - ์žˆ์œผ๋ฉด count ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ๊ทธ ๋‹ค์Œ ์ˆซ์ž ์žˆ๋Š”์ง€ ๋ฐ˜๋ณตํ•ด์„œ ์ฒดํฌ
7+
* - ์—ฐ์† ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ์ˆœํšŒํ•˜๊ธฐ
8+
* - count๊ฐ€ maxCount๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ maxCount๊ฐ’์„ count ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ
9+
*
10+
* ์‹œ๊ฐ„๋ณต์žก๋„ :
11+
* - ์ˆซ์ž ๋ฐฐ์—ด ๊ธธ์ด๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ•˜๋‹ˆ๊นŒ O(n)
12+
*
13+
* ๊ณต๊ฐ„๋ณต์žก๋„ :
14+
* - Set์„ ์‚ฌ์šฉํ•ด์„œ ์ˆซ์ž ์ค‘๋ณต ์ œ๊ฑฐํ•˜๊ณ  ์ €์žฅํ•˜๋‹ˆ๊นŒ O(n)
15+
*/
16+
17+
/**
18+
* @param {number[]} nums
19+
* @return {number}
20+
*/
21+
var longestConsecutive = function (nums) {
22+
// ๋ฐฐ์—ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ
23+
if (nums.length === 0) return 0;
24+
25+
const uniqueNums = new Set(nums);
26+
let maxCount = 1;
27+
28+
for (const num of uniqueNums) {
29+
// ์—ฐ์†๋œ ์ˆซ์ž์˜ ์‹œ์ž‘ ์ง€์ ์ธ์ง€ ์ฒดํฌ(๋” ์ž‘์€ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„์•ผ ํ•จ)
30+
if (!uniqueNums.has(num - 1)) {
31+
let next = num + 1;
32+
let count = 1;
33+
34+
// ์—ฐ์† ์ˆซ์ž๊ฐ€ ๋” ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌ
35+
while (uniqueNums.has(next)) {
36+
next++;
37+
count++;
38+
}
39+
40+
// ๊ธฐ์กด maxCount๋ณด๋‹ค ํฌ๋ฉด, count ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ
41+
if (maxCount < count) maxCount = count;
42+
}
43+
}
44+
45+
return maxCount;
46+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
3+
* - ์ˆซ์ž ๋ฐ”์—ด์„ ์ „์ฒด ์ˆœํšŒํ•˜๋ฉด์„œ ๋นˆ๋„์ˆ˜๋ฅผ ๊ฐ์ฒด์— ์ €์žฅ
4+
* - ๊ฐ์ฒด ๊ฐ’์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋’ค, ์›ํ•˜๋Š” ํ•ญ๋ชฉ๋งŒํผ ์ž๋ฅด๊ณ  ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค ๋ฆฌํ„ดํ•˜๊ธฐ
5+
*
6+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(nlogn)
7+
* - ์ˆซ์ž ๋ฐฐ์—ด ๊ธธ์ด = n , ๊ฐ€์ ธ์˜ฌ ํ•ญ๋ชฉ ๊ฐœ์ˆ˜ = k
8+
* - ๊ฐ์ฒด์— ์ˆซ์ž์™€ ๋นˆ๋„์ˆ˜ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ์ˆซ์ž ์ˆœํšŒ : O(n)
9+
* - ๊ฐ์ฒด ํ‚ค๊ฐ’์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ : O(nlogn)
10+
* - slice, map : O(k)
11+
*
12+
* ๊ณต๊ฐ„๋ณต์žก๋„ :
13+
* - ์ˆซ์ž ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ๊ฐ์ฒด์— ์ €์žฅํ•˜๋‹ˆ๊นŒ O(n)
14+
*/
15+
16+
/**
17+
* @param {number[]} nums
18+
* @param {number} k
19+
* @return {number[]}
20+
*/
21+
22+
var topKFrequent = function (nums, k) {
23+
const obj = {};
24+
25+
for (const num of nums) {
26+
obj[num] = (obj[num] ?? 0) + 1;
27+
}
28+
29+
return Object.entries(obj)
30+
.sort((a, b) => b[1] - a[1])
31+
.slice(0, k)
32+
.map((item) => Number(item[0]));
33+
};

โ€Žvalid-palindrome/mmyeon.jsโ€Ž

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
*
3+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
4+
* - ๋ฌธ์ž์—ด ์ˆœํšŒํ•˜๋ฉด์„œ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•œ ๋’ค, ์ •๊ทœ์‹์„ ์ด์šฉํ•ด ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋งŒ ์ถ”์ถœ
5+
* - ์ถ”์ถœ๋œ ๋ฌธ์ž์— ํˆฌ ํฌ์ธํ„ฐ ์‚ฌ์šฉํ•ด์„œ ์•ž๋’ค ๋ฌธ์ž ๊ฐ™์€์ง€ ๋น„๊ต.
6+
* - ๋‹ค๋ฅด๋ฉด false ๋ฐ”๋กœ ๋ฆฌํ„ดํ•˜๊ณ , ๋๊นŒ์ง€ ๊ฐ™์œผ๋ฉด true ๋ฐ˜ํ™˜
7+
*
8+
* ์‹œ๊ฐ„๋ณต์žก๋„ :
9+
* - ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ n์ผ ๋•Œ, O(n)
10+
* - match๋กœ ๋ฌธ์ž์—ด ์ฒดํฌ : O(n)
11+
* - ํˆฌ ํฌ์ธํ„ฐ๋กœ ์•ž๋’ค ๋ฌธ์ž ๋น„๊ต : O(n)
12+
*
13+
* ๊ณต๊ฐ„๋ณต์žก๋„ :
14+
* - ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์•ŒํŒŒ๋ฒณ์ด๊ฑฐ๋‚˜ ์ˆซ์ž์ธ ๊ฒฝ์šฐ ๊ธธ์ด๊ฐ€ n์ด ๋จ : O(n)
15+
*
16+
* ๋ฐฐ์šด ์  :
17+
* - ๋ฌธ์ž๊ฐ’ ํ•„์š”ํ•œ ๊ฒŒ ์•„๋‹ˆ๋‹ˆ๊นŒ ๋ถˆํ•„์š”ํ•œ ๋ฐฐ์—ด ๋ณ€ํ™˜(reverse) ์ค„์ด๊ธฐ
18+
* - ๋ฌธ์ž์—ด์ด ์กฐ๊ฑด ๋ฒ”์œ„์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ์ฒดํฌํ•  ๋•Œ๋Š” ์ •๊ทœ์‹ ํ™œ์šฉํ•˜๊ธฐ
19+
*/
20+
21+
/**
22+
* @param {string} s
23+
* @return {boolean}
24+
*/
25+
26+
var isPalindrome = function (s) {
27+
const alphanumericCharacters = s.toLowerCase().match(/[a-z0-9]/g) || [];
28+
29+
let leftPointer = 0;
30+
let rightPointer = alphanumericCharacters.length - 1;
31+
32+
while (leftPointer < rightPointer) {
33+
if (
34+
alphanumericCharacters[leftPointer] !==
35+
alphanumericCharacters[rightPointer]
36+
) {
37+
return false;
38+
}
39+
40+
leftPointer++;
41+
rightPointer--;
42+
}
43+
44+
return true;
45+
};

0 commit comments

Comments
ย (0)