Skip to content

Commit d7025b8

Browse files
authored
Merge pull request #2009 from Blossssom/main
[Blossssom] WEEK 01 solutions
2 parents 9fb3f8b + 5e6afc6 commit d7025b8

File tree

5 files changed

+201
-0
lines changed

5 files changed

+201
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
*
3+
* @param nums - μ •μˆ˜ λ°°μ—΄
4+
* @returns - 배열에 같은 값이 2번 이상 반볡 되면 true μ•„λ‹˜ false
5+
*
6+
* @description
7+
* 1. Set으둜 길이 비ꡐ ν›„ 길이에 따라 λ°˜ν™˜ O(n) -> Set 생성 μ‹œ μž…λ ₯된 λ°°μ—΄ μš”μ†Œ 순회
8+
* 2. Map으둜 κ°„λ‹¨ν•˜κ²Œ 체크 λ§Œμ•½ has μ‹œ true λ°˜ν™˜ O(n)
9+
* 3. Map, Set 없이 객체둜 체크 O(n)
10+
*/
11+
12+
function containsDuplicate(nums: number[]): boolean {
13+
return nums.length !== new Set(nums).size ? true : false;
14+
}
15+
16+
// function containsDuplicate(nums: number[]): boolean {
17+
// const map = new Map();
18+
// for (const num of nums) {
19+
// if (map.has(num)) {
20+
// return true;
21+
// }
22+
// map.set(num, 1);
23+
// }
24+
// return false;
25+
// }
26+
27+
// function containsDuplicate(nums: number[]): boolean {
28+
// const obj: Record<number, number> = {};
29+
30+
// for (const num of nums) {
31+
// obj[num] = (obj[num] || 0) + 1;
32+
// }
33+
34+
// return Object.keys.length !== nums.length ? true : false;
35+
// }
36+
37+
const exam01 = containsDuplicate([1, 2, 3, 1]);
38+
const exam02 = containsDuplicate([1, 2, 3, 4]);
39+
40+
console.log(exam01, exam02);
41+

β€Žhouse-robber/blossssom.tsβ€Ž

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* @description - 같은 λ‚  μΈμ ‘ν•œ 두 집에 μΉ¨μž… μ‹œ μžλ™μœΌλ‘œ 신고됨
3+
* @param nums - 각 μ§‘μ˜ κΈˆμ•‘μ„ λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ λ°°μ—΄
4+
* @returns - 경찰에 μ‹ κ³ λ˜μ§€ μ•Šκ³  ν›”μΉ  수 μžˆλŠ” μ΅œλŒ€ κΈˆμ•‘
5+
*
6+
* @description
7+
* - 1. tabulation 방식 - O(n)
8+
*/
9+
// function rob(nums: number[]): number {
10+
// if (nums.length < 2) {
11+
// return nums[0];
12+
// }
13+
14+
// const dpTable: Array<number> = Array.from({ length: nums.length }, () => 0);
15+
// dpTable[0] = nums[0];
16+
// dpTable[1] = Math.max(nums[0], nums[1]);
17+
18+
// for (let i = 2; i < nums.length; i++) {
19+
// dpTable[i] = Math.max(nums[i] + dpTable[i - 2], dpTable[i - 1]);
20+
// }
21+
22+
// return Math.max(...dpTable);
23+
// }
24+
25+
function rob(nums: number[]): number {
26+
const memo: Array<number> = Array.from({ length: nums.length }, () => -1);
27+
28+
function solve(i: number): number {
29+
if (i < 0) {
30+
return 0;
31+
}
32+
33+
if (memo[i] !== -1) {
34+
return memo[i];
35+
}
36+
37+
const robCurrent = nums[i] + solve(i - 2);
38+
const skipCurrent = solve(i - 1);
39+
memo[i] = Math.max(robCurrent, skipCurrent);
40+
return memo[i];
41+
}
42+
return solve(nums.length - 1);
43+
}
44+
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* @param nums - μ •λ ¬λ˜μ§€ μ•Šμ€ μ •μˆ˜ λ°°μ—΄
3+
* @returns - κ°€μž₯ κΈ΄ 연속 μš”μ†Œ 길이
4+
*
5+
* @description
6+
* 1. 객체의 μ •λ ¬ ν™œμš© 방식 - O(n log n) -> κ²°κ΅­ key μ •λ ¬ μ‹œ n log n λ°œμƒ
7+
* 2. μ •λ ¬ 없이 key find 방식 - O(n) -> μ‹œμž‘μ μΌ 경우만 νŒλ‹¨, λͺ¨λ“  num에 λŒ€ν•΄ λŒμ§€ μ•ŠμŒ
8+
*/
9+
10+
// function longestConsecutive(nums: number[]): number {
11+
// const obj = nums.reduce((acc, cur) => {
12+
// acc[cur] = (acc[cur] || 0) + 1;
13+
// return acc;
14+
// }, {});
15+
// let cnt = 1;
16+
// let answer = 0;
17+
18+
// const keys = Object.keys(obj);
19+
20+
// for (let i = 1; i < keys.length; i++) {
21+
// if (Number(keys[i]) === Number(keys[i - 1]) + 1) {
22+
// cnt++;
23+
// } else {
24+
// answer = Math.max(answer, cnt);
25+
// cnt = 1;
26+
// }
27+
// }
28+
29+
// answer = Math.max(answer, cnt);
30+
31+
// return answer;
32+
// }
33+
34+
function longestConsecutive(nums: number[]): number {
35+
const numSet = new Set(nums);
36+
let answer = 0;
37+
38+
for (const num of numSet) {
39+
if (!numSet.has(num - 1)) {
40+
let current = num;
41+
let cnt = 1;
42+
43+
while (numSet.has(current + 1)) {
44+
current++;
45+
cnt++;
46+
}
47+
48+
answer = Math.max(answer, cnt);
49+
}
50+
}
51+
return answer;
52+
}
53+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* @param nums - μ •μˆ˜ λ°°μ—΄
3+
* @param k - 자주 λ“±μž₯ν•œ μš”μ†Œμ˜ 길이
4+
* @returns - 자주 λ“±μž₯ν•œ μš”μ†Œλ“€ []
5+
*/
6+
function topKFrequent(nums: number[], k: number): number[] {
7+
const map = new Map();
8+
for (const num of nums) {
9+
if (map.has(num)) {
10+
map.set(num, map.get(num) + 1);
11+
} else {
12+
map.set(num, 1);
13+
}
14+
}
15+
16+
const sorted = Array.from(map)
17+
.sort((a, b) => b[1] - a[1])
18+
.slice(0, k)
19+
.map((v) => v[0]);
20+
return sorted;
21+
}
22+
23+
topKFrequent([1, 1, 1, 2, 2, 3], 2);
24+

β€Žtwo-sum/blossssom.tsβ€Ž

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* @param nums - μ •μˆ˜ λ°°μ—΄
3+
* @param target - nums 값을 더해 λ‚˜μ˜¬ κ°’
4+
* @returns - target을 λ§Œλ“œλŠ” index κ°’
5+
*
6+
* @description
7+
* 1. λ™μΌν•œ μš”μ†Œ λ‘λ²ˆ μ‚¬μš© κΈˆμ§€
8+
* 2. 각 μž…λ ₯에 λŒ€ν•΄ λͺ…ν™•ν•œ ν•˜λ‚˜μ˜ μ†”λ£¨μ…˜μ΄ μžˆλ‹€κ³  κ°€μ •
9+
*
10+
* @answer1
11+
* - O(n^2)
12+
*
13+
* @answer2
14+
* - O(n)
15+
*/
16+
17+
// function twoSum(nums: number[], target: number): number[] {
18+
// for (let i = 0; i < nums.length - 1; i++) {
19+
// for (let j = i + 1; j < nums.length; j++) {
20+
// if (nums[i] + nums[j] === target) {
21+
// return [i, j];
22+
// }
23+
// }
24+
// }
25+
// return [];
26+
// }
27+
28+
function twoSum(nums: number[], target: number): number[] {
29+
const map = new Map();
30+
31+
for (let i = 0; i < nums.length; i++) {
32+
if (map.has(target - nums[i])) {
33+
return [map.get(target - nums[i]), i];
34+
}
35+
map.set(nums[i], i);
36+
}
37+
return [];
38+
}
39+

0 commit comments

Comments
Β (0)