Skip to content

Commit 32ef619

Browse files
Merge pull request #1671 from grapefruitgreentealoe/week1
2 parents 53ce7c7 + c99a3cf commit 32ef619

File tree

5 files changed

+204
-17
lines changed

5 files changed

+204
-17
lines changed

โ€Žcontains-duplicate/grapefruitgreentealoe.jsโ€Ž

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,23 @@ var containsDuplicate = function (nums) {
2424
}
2525
return false;
2626
};
27+
28+
//25.7.23 ํ’€์ด์‹œ๊ฐ„ 10๋ถ„
29+
/**
30+
* @param {number[]} nums
31+
* @return {boolean}
32+
*/
33+
var containsDuplicate = function(nums) {
34+
//๋‘๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚˜๋Š”๊ฒŒ ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ดํ•˜์‹œ์˜ค.
35+
//์ด์ค‘ ์ˆœํšŒํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผํ•  ์˜ˆ์ •.
36+
//์‹œ๊ฐ„๋ณต์žก๋„ ์ค‘์š”.
37+
//1. ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ , ๊ทธ ๋ฐฐ์—ด์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋ฆฌํ„ด false.
38+
//2.๋ฐฐ์—ด๋ณด๋‹ค Set์„ ์‚ฌ์šฉํ•œ,์‚ฝ์ž… ๋ฐ ์กฐํšŒ ์†๋„ ์ตœ์ ํ™” ํ™œ์šฉํ•˜๊ธฐ.
39+
const container = new Set();
40+
for(let i =0; i<nums.length;i++){
41+
if(container.has(nums[i])) return true;
42+
else container.add(nums[i])
43+
}
44+
return false
45+
};
46+
//์œ„์˜ ์ฝ”๋“œ๋ณด๋‹ค, ๋ฆฌํ„ด์„ ๋” ๋นจ๋ฆฌํ•œ๋‹ค๋Š” ์ด์ ์ด ์žˆ๋‹ค.

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,23 @@ var rob2 = function (nums) {
4343
};
4444
//๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ O(1)๋กœ ๊ฐœ์„ 
4545

46+
47+
//7.21 ํ’€์ด์‹œ๊ฐ„ 10๋ถ„ ์†Œ์š”
48+
49+
50+
/**
51+
* @param {number[]} nums
52+
* @return {number}
53+
*/
54+
var rob = function(nums) {
55+
const dp = new Array(nums.length+1).fill(0);
56+
dp[1] = nums[0]
57+
for(let i = 2; i<=nums.length;i++){
58+
dp[i] = Math.max(dp[i-1],dp[i-2]+nums[i-1])
59+
}
60+
return dp[nums.length]
61+
};
62+
/**
63+
์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
64+
๊ณต๊ฐ„๋ณต์žก๋„ : O(n)
65+
*/
Lines changed: 86 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,99 @@
1+
12
/**
23
* ์ •์ˆ˜ ๋ฐฐ์—ด nums
34
* ๊ฐ€์žฅ ๋งŽ์ด ์—ฐ์†๋˜๋Š” ์š”์†Œ์˜ ๊ธธ์ด ๋ฆฌํ„ด.
45
* O(n) ์‹œ๊ฐ„์•ˆ์— ๋Œ์•„๊ฐ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉํ• ๊ฒƒ.
56
*/
7+
/*์šฐ์„  ์ฒ˜์Œ ํ‘ผ ๋ฐฉ๋ฒ•์€*/
8+
9+
var longestConsecutive = function(nums) {
10+
let maxCount = 0;
11+
nums = [...nums].sort((a,b)=>a-b);
12+
for(let i = 0;i < nums.length;i++){
13+
let current = nums[i];
14+
let count = 1;
15+
for(let j = i+1;j<nums.length;j++){
16+
if(current+1 == nums[j]){
17+
current = nums[j]
18+
count +=1;
19+
}else if(current == nums[j]){
20+
continue;
21+
}
22+
}
23+
maxCount = Math.max(maxCount,count)
24+
count = 1;
25+
}
26+
return maxCount
27+
};
28+
29+
30+
/*์‹œ๊ฐ„๋ณต์žก๋„:
31+
2์ค‘for๋ฌธ+sort
32+
n^2 + nlogn => n^2.
33+
๊ณต๊ฐ„๋ณต์žก๋„:
34+
nums๋Š” ์ดˆ๊ธฐํ™”ํ–ˆ๊ณ ,
35+
๊ธฐํƒ€ ๋ณ€์ˆ˜๋“ค๋งŒ ์‚ฌ์šฉ์„ ํ–ˆ๋‹ค(maxCount,current,count)=> O(1)
36+
37+
ํ•˜์ง€๋งŒ ์ด๋ฌธ์ œ๋Š” O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ ธ๊ฐ€์•ผํ•œ๋‹ค.
38+
๊ทธ๋Ÿฌ๋ ค๋ฉด sort๋„ ํ•˜์ง€๋ง์•„์•ผํ•˜๊ณ , 2์ค‘for๋ฌธ์„ ์“ฐ์ง€๋„ ๋ง์•„์•ผํ•œ๋‹ค.
39+
(์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ์ธ๋ฑ์Šค+1ํ•ด์„œ ํ•ด๊ฒฐํ•ด๋„ ๋˜๊ธดํ•œ๋‹ค. ๊ทธ๋ž˜๋„ ์ •๋ ฌ๋•Œ๋ฌธ์— nlogn์ด ๋œ๋‹ค.)
40+
41+
๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š”,set์„ ์‚ฌ์šฉํ•ด์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
42+
*/
43+
644
/**
745
* @param {number[]} nums
846
* @return {number}
947
*/
10-
var longestConsecutive = function (nums) {
11-
const numSet = new Set(nums);
12-
let maxCount = 0;
13-
for (let i of numSet) {
14-
//n ๋ฒˆ ์ˆœํšŒ
15-
// ++ ์ด์ „์— ์—ฐ์†์ฒดํฌ๊ฐ€ ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด์ „ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด pass
16-
if (numSet.has(i - 1)) continue; //์ด๋ฏธ ์ง„ํ–‰ ๋œ ์—ฐ์†์ฒดํฌ์˜ ๊ฒฝ์šฐ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
17-
//์—ฐ์†์ด ๋˜๋Š”์ง€ ํ™•์ธํ•ด์„œ ์žˆ์œผ๋ฉด 1์ถ”๊ฐ€.
18-
let length = 0;
19-
while (numSet.has(i + length)) {
20-
//์—ฐ์†์ด ๋Š๊ธฐ๋Š” ์ˆœ๊ฐ„ ๋ฉˆ์ถ”๋Š” ๋ฐ˜๋ณต๋ฌธ. ์ฆ‰ for๋ฌธ ์ „์ฒด ํ†ตํ‹€์–ด ์ตœ๋Œ€ n๋ฒˆ ์‹คํ–‰.
21-
length++;
48+
var longestConsecutive = function(nums) {
49+
if(nums.length == 0) return 0
50+
let maxCount = 1;
51+
nums.sort((a,b)=>a-b);
52+
nums = [...new Set(nums)];
53+
let count = 1;
54+
for (let i = 0; i < nums.length - 1; i++) {
55+
if (nums[i] + 1 === nums[i + 1]) {
56+
count += 1;
57+
} else if (nums[i] === nums[i + 1]) {
58+
// ์ค‘๋ณต์ผ ๊ฒฝ์šฐ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ํ•˜๊ณ  ๋„˜์–ด๊ฐ
59+
continue;
60+
} else {
61+
maxCount = Math.max(maxCount, count);
62+
count = 1;
63+
}
2264
}
23-
maxCount = Math.max(length, maxCount);
24-
}
25-
return maxCount;
65+
maxCount = Math.max(maxCount, count); // ๋งˆ์ง€๋ง‰์—๋„ ๋น„๊ต ํ•„์š”
66+
67+
return maxCount
2668
};
69+
/*sortํ• ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ nlog(n)์ธ๋ฐ ์™œ ํ†ต๊ณผํ–ˆ์ง€.. ๋น…์˜ค ๊ณ„์‚ฐ๋ฒ•์ด ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ„์‚ฐํ•œ๊ฑฐ๋ผ, ์šด์ข‹๊ฒŒ ํ†ต๊ณผํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
70+
์ข€ ๋” ์ตœ์ ํ™” ํ•ด๋ณด์ž
71+
*/
2772

28-
//์‹œ๊ฐ„๋ณต์žก๋„ O(n) + O(n) = O(n) /๊ณต๊ฐ„๋ณต์žก๋„ O(n)
73+
/**
74+
* @param {number[]} nums
75+
* @return {number}
76+
*/
77+
var longestConsecutive = function(nums) {
78+
const numsSet = new Set(nums);
79+
let maxCount = 0;
80+
for(let num of numsSet){
81+
//์ค‘๋ณต๋œ ๊ณ„์‚ฐ ํŒจ์Šค
82+
if(numsSet.has(num-1)) continue;
83+
let length = 1;
84+
while(numsSet.has(num+length)){
85+
length++
86+
}
87+
maxCount = Math.max(maxCount,length)
88+
}
89+
return maxCount
90+
};
2991

30-
//์ƒ๊ฐํ•  ์ง€์ . ์–‘์ชฝ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค๋ฉด, ์‹œ๊ฐ„๋ณต์žก๋„ ์ตœ์ ํ™” ๊ฐ€๋Šฅ
92+
/*
93+
set์„ ์ด์šฉํ•ด์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐ
94+
set์˜ has๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์กฐํšŒ ์ตœ์ ํ™”
95+
while์„ ์ผ์ง€๋งŒ, for๋ฌธ์˜ ์ฒซ๋ฒˆ์งธ if๋ฌธ์„ ํ†ตํ•ด ์‹ค์ œ ์ˆ˜ํ–‰์€ O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง.
96+
์ด ์™ธ์—๋„, set์œผ๋กœ ๋งŒ๋“  ๋‹ค์Œ์— ์‚ญ์ œํ•ด๊ฐ€๋ฉด์„œ(while) ์ˆœํšŒ๊ฐ€ ์•„๋‹Œ, ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ๊ฐ’๋“ค์„ ์—ฐ์†์ ์œผ๋กœ(while) ์ง€์šฐ๊ณ , ์—ฐ์†์ด ๋๋‚˜๋ฉด pop์—์„œ ๋‚˜์˜จ ๊ฐ’์˜ left right๋ฅผ ์กฐํšŒํ•ด์„œ ์—†์œผ๋ฉด ๋‹ค์‹œ ์ตœ๋Œ€๊ฐ’๊ณผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค.
97+
๊ทผ๋ฐ ์œ„์˜ ์ฝ”๋“œ์—์„œ has๋กœ ์กฐํšŒํ•˜๋‚˜, remove๋ฅผ ํ•˜๋ ค๋ฉด ์–ด์ฐจํ”ผ ๋˜ ์กฐํšŒํ•ด์•ผํ•˜๋‹ˆ,
98+
์„ฑ๋Šฅ์ƒ์˜ ์ฐจ์ด๋Š” ํฌ๊ฒŒ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
99+
*/

โ€Žtop-k-frequent-elements/grapefruitgreentealoe.jsโ€Ž

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,31 @@ var topKFrequent = function (nums, k) {
2727
};
2828

2929
//O(n) + O(n log n) + O(n) + O(k) = O(n log n)
30+
31+
32+
//7.22 ์†Œ์š”์‹œ๊ฐ„ 10๋ถ„
33+
/**
34+
* @param {number[]} nums
35+
* @param {number} k
36+
* @return {number[]}
37+
*/
38+
var topKFrequent = function(nums, k) {
39+
//์šฐ์„ ์€, Map์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์ˆซ์ž ๊ฐ๊ฐ์— ๋Œ€ํ•œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
40+
const numsMap = new Map();
41+
for(let num of nums){
42+
if(numsMap.has(num)){
43+
numsMap.set(num,numsMap.get(num)+1)
44+
}else{
45+
numsMap.set(num,1)
46+
}
47+
}
48+
//๊ทธ๋Ÿฐ๋‹ค์Œ Map์— ๋Œ€ํ•ด์„œ, ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง„ ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•œ๋‹ค.
49+
const ret = [...numsMap].sort((a,b)=>b[1]-a[1]).slice(0,k).map(x=>x[0]);
50+
return ret
51+
};
52+
53+
// ์ด์ „ ๋‹ต๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, for๋ฌธ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด์„œ, ์กฐ๊ธˆ ํ’€์–ด์„œ ์ž‘์„ฑ์„ ํ•˜๊ฒŒ ๋œ๊ฑฐ๊ฐ™๋‹ค.
54+
// ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™๋‹ค.
55+
56+
// ์‹œ๊ฐ„ ๋ณต์žก๋„ : for๋ฌธ - O(n) , sort O(nlogn)
57+
// ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

โ€Žtwo-sum/grapefruitgreentealoe.jsโ€Ž

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,53 @@ var twoSum3 = function (nums, target) {
4848
numMap.set(nums[i], i); // ๊ณต๊ฐ„ O(1)
4949
}
5050
};
51+
52+
53+
//25.7.24
54+
/**
55+
* @param {number[]} nums
56+
* @param {number} target
57+
* @return {number[]}
58+
*/
59+
var twoSum = function(nums, target) {
60+
//์šฐ์„  nums๋ฐฐ์—ด์—์„œ target๋ณด๋‹ค ํฐ๊ฒƒ์€ ์‚ญ์ œํ•œ๋‹ค. => ์ด๊ฒƒ ๋˜ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋“ ๋‹ค. ํ•˜์ง€๋ง์ž
61+
//1. ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.
62+
for(let i=0;i<nums.length-1;i++){
63+
let total = nums[i]
64+
for(let j=i+1;j<nums.length;j++){
65+
if(total+nums[j] == target){
66+
return [i,j]
67+
}
68+
}
69+
}
70+
};
71+
72+
/**
73+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(N^2)
74+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
75+
*/
76+
77+
/*
78+
ํˆฌํฌ์ธํ„ฐ๋กœ ๋‹ค์‹œ ํ’€์—ˆ์ง€๋งŒ, ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ map ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•ด์„œ, ์กฐํšŒ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š”๊ฒƒ..
79+
Map.get(key) : O(1) ํ‰๊ท  ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ‚ค ์กฐํšŒ๊ฐ€ ์ƒ์ˆ˜ ์‹œ๊ฐ„
80+
Array.includes(value) : O(n) ๋ฐฐ์—ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆœ์ฐจ ํƒ์ƒ‰ (์ตœ์•…์˜ ๊ฒฝ์šฐ ์ „์ฒด ํƒ์ƒ‰)
81+
*/
82+
83+
var twoSum = function(nums, target) {
84+
//ํ˜„์žฌ nums์— ๋Œ€ํ•ด์„œ, subnums๋ฅผ ์ €์žฅํ•œ๋‹ค.
85+
const subNumsMap = new Map();
86+
for(let i = 0;i<nums.length;i++){
87+
const subNum = target - nums[i];
88+
if(subNumsMap.has(subNum)){
89+
return [subNumsMap.get(subNum),i]
90+
}
91+
subNumsMap.set(nums[i],i)
92+
}
93+
};
94+
//์‹œ๊ฐ„๋ณต์žก๋„: O(n) , ๊ณต๊ฐ„๋ณต์žก๋„ : O(n)
95+
96+
/*
97+
Q. ์—ฌ๊ธฐ์„œ ์˜๋ฌธ. Map์ด์ข‹๋ƒ object๊ฐ€ ์ข‹๋ƒ?
98+
์•Œ๊ณ ๋ฆฌ์ฆ˜์šฉ ํ•ด์‹œ๋งต ๋Œ€์šฉ์ด๋ผ๋ฉด ๋Œ€๋ถ€๋ถ„ Map ์ถ”์ฒœ
99+
Object๋Š” JSON-like ๋ฐ์ดํ„ฐ ๋ณด๊ด€์šฉ์— ์ ํ•ฉ
100+
*/

0 commit comments

Comments
ย (0)