Skip to content

Commit 767c2f3

Browse files
authored
Merge pull request #877 from Yjason-K/main
[gomgom22] Week5
2 parents 75facce + 9260d77 commit 767c2f3

File tree

4 files changed

+129
-0
lines changed

4 files changed

+129
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* ์ตœ๋Œ€ ์ด์ต์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
3+
* @param {number[]} prices
4+
* @returns {number}
5+
*
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n) (n: ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ฐฐ์—ด์˜ ๊ธธ์ด)
7+
* ๊ณต๊ฐ„ ๋ณต์žก๋„ : 0(1) (์ถ”๊ฐ€ ์ž๋ฃŒ๊ตฌ์กฐ X)
8+
*/
9+
function maxProfit(prices: number[]): number {
10+
let minPrice = 100001; // ์ง€๊ธˆ๊นŒ์ง€์˜ ์ตœ์†Œ ๊ฐ€๊ฒฉ
11+
let maxProfit = 0; // ์ตœ๋Œ€ ์ด์ต
12+
13+
for (let price of prices) {
14+
// ์ตœ์†Œ ๊ฐ€๊ฒฉ ๊ฐฑ์‹ 
15+
if (price < minPrice) {
16+
minPrice = price;
17+
}
18+
19+
// ํ˜„์žฌ ๊ฐ€๊ฒฉ์—์„œ ์ตœ์†Œ ๊ฐ€๊ฒฉ์„ ๋บ€ ์ด์ต์ด ์ตœ๋Œ€ ์ด์ต๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๊ฐฑ์‹ 
20+
const potentialProfit = price - minPrice;
21+
if (potentialProfit > maxProfit) {
22+
maxProfit = potentialProfit;
23+
}
24+
}
25+
26+
return maxProfit;
27+
}
28+
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @description ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
3+
* @param {string[]} strs - ๋ฌธ์ž์—ด ๋ฐฐ์—ด
4+
* @returns {string} ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด
5+
*
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N)
7+
* - N์€ ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด ๊ธธ์ด์˜ ํ•ฉ
8+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
9+
* - ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์—†์Œ
10+
*/
11+
function encode(strs: string[]): string {
12+
return strs.join(':');
13+
}
14+
15+
/**
16+
* @description ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ๋ฌธ์ž์—ด ๋ฐฐ์—ด๋กœ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
17+
* @param {string} s - ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด
18+
* @returns {string[]} ๋””์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด ๋ฐฐ์—ด
19+
*
20+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N)
21+
* - N์€ ์ž…๋ ฅ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
22+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
23+
* - ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์—†์Œ
24+
*/
25+
function decode(s: string): string[] {
26+
return s.split(':');
27+
}
28+

โ€Žgroup-anagrams/Yjason-K.tsโ€Ž

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์—์„œ Anagram์„ ๊ทธ๋ฃนํ™” ํ•ด์„œ ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
3+
* @param {string[]} strs - ๋ฌธ์ž์—ด ๋ฐฐ์—ด
4+
* @returns {string[][]} Anagram์„ ๊ทธ๋ฃน ๋ฐฐ์—ด
5+
*
6+
* ๋ฌธ์ž์—ด๋“ค์„ ์ •๋ ฌํ•ด์„œ Map์— ๋‹ด์•„์„œ ์กด์žฌํ•˜๋ฉด ๊ทธ ๋•Œ์˜ ๋ฌธ์ž๋ฅผ value๋กœ ์ถ”๊ฐ€
7+
* ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ value๋กœ ์ถ”๊ฐ€
8+
*
9+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N * M * log(M))
10+
* - N์€ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์˜ ๊ธธ์ด
11+
* - M์€ ๊ฐ ๋ฌธ์ž์—ด์˜ ํ‰๊ท  ๊ธธ์ด (์ •๋ ฌ ์‹œ๊ฐ„ ๋•Œ๋ฌธ)
12+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(N * M)
13+
* - ํ•ด์‹œ๋งต์— ์ €์žฅ๋˜๋Š” ๋ฌธ์ž์—ด ๊ทธ๋ฃน ๋•Œ๋ฌธ
14+
*/
15+
function groupAnagrams(strs: string[]): string[][] {
16+
const anagramMap: Map<string, string[]> = new Map();
17+
for (const str of strs) {
18+
19+
// ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด
20+
const sortedStr = str.split('').sort().join('');
21+
22+
// ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด์ด ์กด์žฌํ•˜๋Š” ์•Š๋Š” ๊ฒฝ์šฐ
23+
if (!anagramMap.has(sortedStr)) {
24+
anagramMap.set(sortedStr, [])
25+
}
26+
27+
// ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด์„ key๋กœ ํ•˜๋Š” value str ์ถ”๊ฐ€
28+
anagramMap.get(sortedStr)?.push(str);
29+
}
30+
31+
// anagramMap์—์„œ values๋งŒ ๋ฐฐ์—ด๋กœํ•ด์„œ ์ถœ๋ ฅ
32+
return Array.from(anagramMap.values())
33+
}
34+

โ€Žword-break/Yjason-K.tsโ€Ž

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์ด ๋‹จ์–ด ์‚ฌ์ „์— ์žˆ๋Š” ๋‹จ์–ด๋“ค๋กœ ๋‚˜๋ˆ„์–ด์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
3+
*
4+
*
5+
* @param {string} s - ํ™•์ธํ•  ๋ฌธ์ž์—ด
6+
* @param {string[]} wordDict - ๋‹จ์–ด ์‚ฌ์ „
7+
* @returns {boolean} ๋ฌธ์ž์—ด์ด ๋‹จ์–ด๋กœ ์™„๋ฒฝํžˆ ๋‚˜๋ˆ„์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉด `true`, ์•„๋‹ˆ๋ฉด `false`
8+
*
9+
* ์‹œ๊ฐ„ ๋ณต์žก์„ฑ O(n * m * k)
10+
* - n: ๋ฌธ์ž์—ด s ๊ธธ์ด
11+
* - m: ๋‹จ์–ด ์‚ฌ์ „ ๊ธธ์ด
12+
* - k: ๋‹จ์–ด ์‚ฌ์ „ ๋‚ด ๋‹จ์–ด ๊ธธ์ด
13+
*
14+
* ๊ณต๊ฐ„ ๋ณต์žก์„ฑ O(n)
15+
* - ๋ฉ”๋ชจ์ด์ œ์ด์…˜(memo) ๋ฐ ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ ํฌ๊ธฐ๊ฐ€ ๋ฌธ์ž์—ด ๊ธธ์ด n์— ๋น„๋ก€.
16+
*/
17+
function wordBreak(s: string, wordDict: string[]): boolean {
18+
const memo: Record<number, boolean> = {};
19+
20+
/**
21+
* @param {number} start - ํ˜„์žฌ ์‹œ์ž‘ idx
22+
* @returns {boolean} ์ฃผ์–ด์ง„ idx ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉด true
23+
*/
24+
const dfs = (start: number): boolean => {
25+
if (start in memo) return memo[start];
26+
if (start === s.length) return (memo[start] = true);
27+
28+
for (const word of wordDict) {
29+
if (s.startsWith(word, start) && dfs(start + word.length)) {
30+
return (memo[start] = true);
31+
}
32+
}
33+
34+
return (memo[start] = false);
35+
};
36+
37+
return dfs(0);
38+
}
39+

0 commit comments

Comments
ย (0)