Skip to content

Commit 1732f9f

Browse files
authored
Merge pull request #2438 from sadie100/main
[sadie100] WEEK 03 Solutions
2 parents 22d8d13 + 09beca4 commit 1732f9f

5 files changed

Lines changed: 114 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
dfs๋กœ ๊ฐ candidates๋ฅผ ๋Œ๋ฉด์„œ target๊ณผ ๊ฐ™์•„์ง€๋Š” ์ˆœ๊ฐ„์— result๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
3+
4+
๊ฐ™์€ ์กฐํ•ฉ์ด ์ค‘๋ณต๋จ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด candidates๋ฅผ ์ •๋ ฌํ•˜๊ณ , ๊ฐ ์ˆซ์ž๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ candidate๋งŒ ํƒ์ƒ‰ํ•œ๋‹ค.
5+
6+
์‹œ๊ฐ„๋ณต์žก๋„ : O(N^(T/min(c))) - N์€ candidates์˜ ์ˆ˜, T๋Š” ํƒ€๊ฒŸ, c๋Š” candidates.
7+
ํƒ€๊ฒŸ์„ candidates์˜ ์ตœ์†Œ๊ฐ’์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์ด ์ตœ๋Œ€ ๊นŠ์ด์ด๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•จ
8+
*/
9+
10+
function combinationSum(candidates: number[], target: number): number[][] {
11+
candidates.sort((a, b) => a - b)
12+
const result = []
13+
const search = (idx, nums, sum) => {
14+
if (sum === target) {
15+
result.push(nums)
16+
return
17+
}
18+
for (let i = idx; i < candidates.length; i++) {
19+
const num = candidates[i]
20+
if (sum + num > target) return
21+
search(i, [...nums, num], sum + num)
22+
}
23+
}
24+
25+
search(0, [], 0)
26+
27+
return result
28+
}

โ€Ždecode-ways/sadie100.tsโ€Ž

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
dp ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  s๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋‹จ๊ณ„์—์„œ ์ด์ „ ์ž๋ฆฌ์˜ ์ˆซ์ž๋ฅผ ์ฑ„ํƒํ•˜๊ฑฐ๋‚˜ ๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋”ํ•ด ๋‚˜๊ฐ„๋‹ค
3+
๋งŒ์•ฝ ํ˜„์žฌ ์ˆœ๋ฒˆ์˜ ์ˆซ์ž๊ฐ€ 0์ผ ๊ฒฝ์šฐ : ์ด์ „ ์ž๋ฆฌ์˜ ์ˆซ์ž๋ฅผ ์ฑ„ํƒ, i-1 ์ˆœ๋ฒˆ์˜ ์ˆซ์ž๊ฐ€ 0์ด๊ฑฐ๋‚˜ 3 ์ด์ƒ์ด๋ฉด ์ฆ‰์‹œ 0์„ ๋ฆฌํ„ด. ์•„๋‹ ๊ฒฝ์šฐ dp์˜ i-2๋ฒˆ์งธ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
4+
์ด์ „ ์ˆœ๋ฒˆ์˜ ์ˆซ์ž์™€ ํ˜„์žฌ ์ˆซ์ž๋ฅผ ๋”ํ•œ ๊ฐ’์ด 26๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ด์ „ ์ˆœ๋ฒˆ์˜ ์ˆซ์ž๊ฐ€ 0์ผ ๊ฒฝ์šฐ : ๊ฐœ๋ณ„ ์ž๋ฆฌ์˜ ์ˆซ์ž๋ฅผ ์ฑ„ํƒ, ์ง์ „ dp๊ฐ’์„ ๋„ฃ๋Š”๋‹ค
5+
์œ„์— ๋ชจ๋‘ ํ•ด๋‹นํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ : ๊ฐœ๋ณ„ ์ž๋ฆฌ์˜ ์ˆซ์ž๋ฅผ ์ฑ„ํƒํ•˜๊ฑฐ๋‚˜ ๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‹ค ๊ณ ๋ คํ•˜์—ฌ ์ง์ „ dp๊ฐ’๊ณผ 2์Šคํ… ์ „ dp๊ฐ’์„ ๋”ํ•œ๋‹ค
6+
๋งจ ๋ ์ˆœ๋ฒˆ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ์˜ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค
7+
8+
์‹œ๊ฐ„๋ณต์žก๋„ : O(N) (N์€ s์˜ ๊ธธ์ด)
9+
*/
10+
11+
function numDecodings(s: string): number {
12+
if(s.startsWith("0")) return 0;
13+
const dp = [];
14+
15+
dp.push(1);
16+
if(s.length<2) return dp[0]
17+
for(let i=1;i<s.length;i++){
18+
const numStr = s[i];
19+
if(numStr === "0") {
20+
if(s[i-1] === "0" || Number(s[i-1])>=3) return 0;
21+
dp.push(dp?.[i-2] ?? 1)
22+
}else if(Number(`${s[i-1]}${numStr}`) > 26 || s[i-1] === "0"){
23+
dp.push(dp[i-1])
24+
}else{
25+
dp.push(dp[i-1] + (dp?.[i-2] ?? 1))
26+
}
27+
}
28+
29+
return dp[s.length-1];
30+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
nums๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์ตœ๋Œ€ sum์„ ์ฐพ๋Š”๋‹ค. ๋‹ค์Œ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค
3+
- ๋งค ์ˆœ๊ฐ„ ์ˆซ์ž๋ฅผ ๋”ํ•ด ๊ฐ€๋ฉฐ ํ˜„์žฌ๊นŒ์ง€์˜ ํ•ฉ๊ณผ ์ตœ๋Œ€ํ•ฉ ๋น„๊ต, ๊ฐฑ์‹ 
4+
- ๋งŒ์•ฝ ํ•ด๋‹น ์ธ๋ฑ์Šค num์„ ๋”ํ–ˆ์„ ๋•Œ 0๋ณด๋‹ค ์ž‘์•„์ง€๋ฉด ํ˜„์žฌ๊นŒ์ง€์˜ ๊ฐ’์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”(์ดํ•ฉ ๋ฒ„๋ฆผ)
5+
6+
*/
7+
8+
function maxSubArray(nums: number[]): number {
9+
let result = -Infinity;
10+
let curSum = 0;
11+
12+
for (let num of nums) {
13+
curSum += num;
14+
result = Math.max(result, curSum);
15+
if (curSum < 0) curSum = 0;
16+
}
17+
18+
return result;
19+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
n์„ ์ด์ง„์ˆ˜ ๋ณ€ํ™˜ํ•˜๊ณ  1์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค
3+
4+
์‹œ๊ฐ„๋ณต์žก๋„ O(N) (N์€ ์ˆซ์ž n์˜ ๋น„ํŠธ ๊ฐœ์ˆ˜)
5+
*/
6+
7+
function hammingWeight(n: number): number {
8+
const binaryNum = n.toString(2)
9+
let result = 0
10+
for (let char of binaryNum) {
11+
if (char === '1') result += 1
12+
}
13+
return result
14+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
s์—์„œ ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ธ€์ž๋ฅผ ๋‹ค ๋‚ ๋ฆฌ๊ณ , ์Šคํƒ์— ๋ฌธ์ž๋ฅผ ์ ˆ๋ฐ˜๊นŒ์ง€ ๋‹ด์€ ํ›„ ์ ˆ๋ฐ˜ ์ดํ›„๋ถ€ํ„ฐ๋Š” ๊บผ๋‚ด๊ฐ€๋ฉฐ ์•ž๋’ค ๋ ˆํ„ฐ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค
3+
4+
์‹œ๊ฐ„๋ณต์žก๋„ : O(N) (N์€ s์˜ ๊ธธ์ด)
5+
๊ณต๊ฐ„๋ณต์žก๋„ : O(N) (์Šคํƒ)
6+
*/
7+
8+
function isPalindrome(s: string): boolean {
9+
const newStr = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()
10+
const isStrEven = newStr.length % 2 === 0
11+
const lenHalf = Math.floor(newStr.length / 2)
12+
const stack = []
13+
for (let i = 0; i < newStr.length; i++) {
14+
if (i < lenHalf) {
15+
stack.push(newStr[i])
16+
} else {
17+
if (!isStrEven && i === lenHalf) continue
18+
const isSame = newStr[i] === stack.pop()
19+
if (!isSame) return false
20+
}
21+
}
22+
return true
23+
}

0 commit comments

Comments
ย (0)