Skip to content

Commit 8f1e53e

Browse files
authored
Merge pull request #637 from limlimjo/main
[jj7779607] Week1
2 parents 8ed7437 + de2bbe6 commit 8f1e53e

File tree

5 files changed

+135
-0
lines changed

5 files changed

+135
-0
lines changed

โ€Žcontains-duplicate/limlimjo.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
var containsDuplicate = function(nums) {
6+
7+
// ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•: filter + indexOf ์‚ฌ์šฉ => indexOf(),filter() ๊ฐ๊ฐ ์‹œ๊ฐ„๋ณต์žก๋„ O(n) ๋‘ ๊ฐœ๊ฐ€ ์ค‘์ฒฉ์ด๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ O(n^2)
8+
// Runtime: Time Limit Exceeded ๋ฐœ์ƒ
9+
const method1 = function() {
10+
const filterNums = nums.filter((item,index) => nums.indexOf(item) !== index);
11+
return filterNums.length > 0;
12+
}
13+
14+
// ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•: Set ์‚ฌ์šฉ => nums ๋ฐฐ์—ด์„ set์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ํ•œ๋ฒˆ์”ฉ ํ™•์ธํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ O(n)
15+
// Runtime: 14ms
16+
const method2 = function() {
17+
const setNums = new Set(nums);
18+
return setNums.size !== nums.length;
19+
}
20+
21+
// ์œ„ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ Set์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์ƒ ํ›จ์”ฌ ๋‚˜์Œ
22+
return method2();
23+
};

โ€Žhouse-robber/limlimjo.js

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 {number}
4+
*/
5+
var rob = function(nums) {
6+
// 1. nums ๋ฐฐ์—ด 0์ผ ๋•Œ์™€ 1์ผ ๋•Œ
7+
if (nums.length === 0) return 0;
8+
if (nums.length === 1) return nums[0];
9+
10+
// 2. i=1์ผ ๋•Œ
11+
nums[1] = Math.max(nums[0], nums[1]);
12+
13+
// 3. i=2์ผ ๋•Œ๋ถ€ํ„ฐ for๋ฌธ ์ˆœํšŒ
14+
for (let i=2; i<nums.length; i++) {
15+
nums[i] = Math.max(nums[i-2] + nums[i], nums[i-1])
16+
}
17+
return nums[nums.length-1];
18+
};
19+
20+
// ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„
21+
// ์‹œ๊ฐ„๋ณต์žก๋„: ๋ฐฐ์—ด์˜ ๊ธธ์ด n ๋งŒํผ for๋ฌธ ์ˆœํšŒํ•˜๋ฏ€๋กœ -> O(n)
22+
// ๊ณต๊ฐ„๋ณต์žก๋„: nums ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๊ณ„์‚ฐ -> O(1)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var longestConsecutive = function(nums) {
6+
// ์ฒซ ๋ฒˆ์งธ ์ •๋ ฌ์„ ํ•œ๋‹ค.
7+
if (nums.length === 0) {
8+
return 0;
9+
}
10+
11+
nums.sort((a, b) => a - b); // ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
12+
console.log(nums);
13+
14+
// ๋‘ ๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ 1์”ฉ ๊ณ„์†ํ•ด์„œ ์ฆ๊ฐ€ํ•˜๋Š” ๊ตฌ๊ฐ„์„ ์ฐพ๋Š”๋‹ค.
15+
let longest = 0;
16+
let length = 1;
17+
18+
for (let i=0; i<nums.length-1; i++) {
19+
if (nums[i] === nums[i+1]) {
20+
continue;
21+
}
22+
// ์—ฐ์†ํ•ด์„œ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๊ตฌ๊ฐ„ ์ฐพ๊ธฐ
23+
if (nums[i+1] - nums[i] === 1) {
24+
length += 1;
25+
} else {
26+
longest = Math.max(longest, length);
27+
length = 1;
28+
}
29+
}
30+
return Math.max(longest, length);
31+
};
32+
33+
// ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„
34+
// ์‹œ๊ฐ„๋ณต์žก๋„: ์ •๋ ฌ ์‚ฌ์šฉ(O(nlogn)) + for๋ฌธ์œผ๋กœ ๋ฐฐ์—ด ํƒ์ƒ‰(O(n)) = O(nlogn)
35+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {number[]}
5+
*/
6+
var topKFrequent = function(nums, k) {
7+
let map = new Map(); // key์—๋Š” ํ•ด๋‹น๋˜๋Š” ์ˆซ์ž, value์—๋Š” ํ•ด๋‹น๋˜๋Š” ์ˆซ์ž์˜ ๊ฐฏ์ˆ˜
8+
9+
// ์ˆซ์ž๋ณ„ ๋นˆ๋„์ˆ˜
10+
nums.forEach((num) => {
11+
map.set(num, (map.get(num) || 0) + 1);
12+
});
13+
14+
// ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
15+
let sortedResult = Array.from(map.entries()).sort((a,b) => b[1] - a[1]);
16+
//console.log(sortedResult);
17+
//console.log(sortedResult.slice(0,k));
18+
19+
// k๊ฐฏ์ˆ˜์˜ ์ˆซ์ž ๋ฐ˜ํ™˜
20+
return sortedResult.slice(0,k).map(item => item[0]);
21+
};
22+
23+
// ์—ฌ๊ธฐ์„œ ์œ„ ์ฝ”๋“œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž...
24+
// ์‹œ๊ฐ„๋ณต์žก๋„ => O(m log m) ** ๋” ๊ฐœ์„ ํ•  ๋ฐฉ๋ฒ• ์ฐพ์•„๋ณด๊ธฐ
25+
// forEach ํ†ตํ•œ ๋ฐฐ์—ด ์ˆœํšŒ: ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ n์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด O(n)
26+
// sortedResult (์ •๋ ฌ): O(m log m)
27+
// k๊ฐฏ์ˆ˜์˜ ์ˆซ์ž ๋ฐ˜ํ™˜: k๊ฐœ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์—ฐ์‚ฐํ•˜๋‹ˆ๊นŒ O(k)
28+
29+
// ๊ณต๊ฐ„๋ณต์žก๋„ => O(n)
30+
// map์˜ ํฌ๊ธฐ: ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ n์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด O(n)
31+
// sortedResult: O(m)
32+
// k๊ฐœ ์ˆซ์ž ์ €์žฅ: O(k)

โ€Žvalid-palindrome/limlimjo.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {string} s
3+
* @return {boolean}
4+
*/
5+
var isPalindrome = function(s) {
6+
// 1. ๋ฌธ์ž์—ด์„ ๋‹ค ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ณ , ์•ŒํŒŒ๋ฒณ/์ˆซ์ž ์•„๋‹Œ ๊ฑฐ ๋‹ค ์ œ๊ฑฐ
7+
if (s.length === 1) {
8+
return true;
9+
} else {
10+
let lcLetter = s.toLowerCase().replace(/[^a-z0-9]/g, '');
11+
//console.log(lcLetter);
12+
13+
// 2. ๋ฌธ์ž์—ด์ด ์•ž์—์„œ ์‹œ์ž‘ํ•  ๋•Œ์™€ ๋’ค์—์„œ ์‹œ์ž‘ํ•  ๋•Œ ๊ฐ™์œผ๋ฉด true, ์•„๋‹ˆ๋ฉด false
14+
if(lcLetter) {
15+
for(let i=0; i<Math.floor(lcLetter.length/2); i++) {
16+
if (lcLetter[i] !== lcLetter[lcLetter.length - 1 - i]) return false;
17+
}
18+
return true;
19+
} else {
20+
return true;
21+
}
22+
}
23+
};

0 commit comments

Comments
ย (0)