Skip to content

Commit 8548141

Browse files
authored
Merge pull request DaleStudy#2407 from hyejj19/main
[hyejj19] WEEK 02 solutions
2 parents 59406aa + 2200f1d commit 8548141

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-0
lines changed

โ€Žclimbing-stairs/hyejj19.tsโ€Ž

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
function climbStairs(n: number, memo = {}): number {
2+
// ์žฌ๊ท€ ์ข…๋ฃŒ์กฐ๊ฑด
3+
if (n === 1) return 1;
4+
if (n === 2) return 2;
5+
6+
// ๊ฐ’์ด ๋ฉ”๋ชจ์— ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ๊ฐ’์„ ๋ฆฌํ„ด
7+
if (memo[n] !== undefined) return memo[n];
8+
9+
// ์•„๋‹ˆ๋ผ๋ฉด ๊ณ„์‚ฐ ํ›„ ๋ฉ”๋ชจ์ด์ง•
10+
memo[n] = climbStairs(n - 1, memo) + climbStairs(n - 2, memo);
11+
12+
return memo[n];
13+
}
14+
15+
// 2๋ฒˆ์งธ ์‹œ๋„
16+
// 1. ์žฌ๊ท€ ์ ‘๊ทผ์˜ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฝœ์Šคํƒ ๊ณผ๋ถ€ํ•˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ.
17+
// 2. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฐ”๋กœ ์ง์ „ ๋‹จ๊ณ„๊นŒ์ง€์˜ ํ•ฉ์‚ฐ ๊ฐ’๋งŒ ์žˆ์–ด๋„ ๊ฒฐ๊ณผ ๋„์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
18+
19+
function climbStairs(n: number): number {
20+
if (n === 1) return 1;
21+
if (n === 2) return 2;
22+
23+
let prev2 = 1; // n-2๋ฒˆ์งธ
24+
let prev1 = 2; // n-1๋ฒˆ์งธ
25+
let cur = 0;
26+
27+
for (let i = 3; i <= n; i++) {
28+
cur = prev2 + prev1;
29+
prev2 = prev1;
30+
prev1 = cur;
31+
}
32+
33+
return cur;
34+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// answer[i] -> nums[i] ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€์˜ ๊ณฑ
2+
function productExceptSelf(nums: number[]): number[] {
3+
let left = [];
4+
let right = [];
5+
let acc = 1;
6+
7+
for (let i = 0; i < nums.length; i++) {
8+
left[i] = acc; // ์ด์ „๊ฒฐ๊ณผ๊นŒ์ง€์˜ ๋ˆ„์ ๊ฐ’์„ i๋ฒˆ์งธ์— ์ €์žฅ
9+
acc = acc * nums[i]; // ๋‹ค์Œ ์ €์žฅ์„ ์œ„ํ•ด ์—…๋ฐ์ดํŠธ
10+
}
11+
12+
acc = 1;
13+
for (let i = nums.length - 1; i >= 0; i--) {
14+
right[i] = acc;
15+
acc = acc * nums[i];
16+
}
17+
18+
let answer = [];
19+
for (let i = 0; i < nums.length; i++) {
20+
answer.push(left[i] * right[i]);
21+
}
22+
23+
return answer;
24+
}
25+
26+
// 2๋ฒˆ์งธ ์‹œ๋„
27+
// ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ O(1)๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์„๊นŒ?
28+
// answer[i] -> nums[i] ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€์˜ ๊ณฑ
29+
function productExceptSelf(nums: number[]): number[] {
30+
let answer = [];
31+
let acc = 1;
32+
33+
for (let i = 0; i < nums.length; i++) {
34+
answer[i] = acc; // ์ด์ „๊ฒฐ๊ณผ๊นŒ์ง€์˜ ๋ˆ„์ ๊ฐ’์„ i๋ฒˆ์งธ์— ์ €์žฅ
35+
acc = acc * nums[i]; // ๋‹ค์Œ ์ €์žฅ์„ ์œ„ํ•ด ์—…๋ฐ์ดํŠธ
36+
}
37+
38+
acc = 1;
39+
for (let i = nums.length - 1; i >= 0; i--) {
40+
answer[i] = answer[i] * acc;
41+
acc = acc * nums[i];
42+
}
43+
44+
return answer;
45+
}

โ€Žvalid-anagram/hyejj19.tsโ€Ž

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// 1๋ฒˆ์งธ ์ ‘๊ทผ
2+
// ๊ธธ์ด๊ฐ€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ์˜ˆ์™ธ์ด๋ฏ€๋กœ false.
3+
// ๋‘ ๋ฌธ์ž์—ด์„ ๋‹ค Map ์œผ๋กœ ๋งŒ๋“ ๋‹ค.
4+
// ํ•˜๋‚˜์˜ Map ์˜ ๊ธ€์ž์™€ ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ Map ์— ์žˆ๋Š” ๊ธ€์ž๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ์กด์žฌ ์—ฌ๋ถ€์™€ ์นด์šดํŠธ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.
5+
6+
function isAnagram(s: string, t: string): boolean {
7+
if (s.length !== t.length) return false;
8+
9+
const sMap = new Map();
10+
for (const sChar of s) {
11+
sMap.set(sChar, (sMap.get(sChar) || 0) + 1);
12+
}
13+
const tMap = new Map();
14+
for (const tChar of t) {
15+
tMap.set(tChar, (tMap.get(tChar) || 0) + 1);
16+
}
17+
18+
for (const [char, count] of tMap) {
19+
if (!sMap.get(char)) return false;
20+
if (sMap.get(char) !== count) return false;
21+
}
22+
23+
return true;
24+
}
25+
26+
// 2๋ฒˆ์งธ ์ ‘๊ทผ
27+
// Map์„ ํ•œ ๊ฐœ๋งŒ ๋งŒ๋“ค๊ณ ๋„ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„๊นŒ?
28+
// 1. ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ Map ์„ ๋งŒ๋“ ๋‹ค.
29+
// 2. ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ํ•ด๋‹น ๋ฌธ์ž์—ด ์นด์šดํŠธ๋ฅผ Map ์—์„œ ์กฐํšŒ
30+
// 3. ๋งŒ์•ฝ ์นด์šดํŠธ๊ฐ€ 0์ด๋ผ๋ฉด false
31+
// 4. ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด Map ์˜ ์นด์šดํŠธ๋ฅผ -1.
32+
function isAnagram(s: string, t: string): boolean {
33+
if (s.length !== t.length) return false;
34+
35+
const sMap = new Map();
36+
for (const sChar of s) {
37+
sMap.set(sChar, (sMap.get(sChar) || 0) + 1);
38+
}
39+
for (const char of t) {
40+
const count = sMap.get(char) || 0;
41+
if (count === 0) return false;
42+
sMap.set(char, count - 1);
43+
}
44+
45+
return true;
46+
}

0 commit comments

Comments
ย (0)