Skip to content

Commit cef899b

Browse files
Merge pull request #1789 from grapefruitgreentealoe/week3
2 parents 8f1990e + a835cb2 commit cef899b

File tree

5 files changed

+248
-0
lines changed

5 files changed

+248
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/**
2+
* @param {number[]} candidates
3+
* @param {number} target
4+
* @return {number[][]}
5+
*/
6+
7+
/**
8+
* candidates๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•œ ์ข…๋ฅ˜์™€ ๊ฐœ์ˆ˜๊ฐ€ ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด ์•ˆ๋œ๋‹ค.
9+
*
10+
*/
11+
var combinationSum = function(candidates, target) {
12+
const candidatesLength = candidates.length
13+
// ์‹œ์ž‘ ์‹œ์ ์—์„œ array๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋„˜๊ฒจ์ค˜์•ผํ•œ๋‹ค.
14+
// candidates ์ค‘์— ๋„ฃ์œผ๋ฉด target์ด ๋˜๋ฉด ๋‹ต์— ๊ทธ ๋ฐฐ์—ด์„ ๋„ฃ๊ณ  ํƒˆ์ถœํ•œ๋‹ค.
15+
// ๋งŒ์•ฝ ๋”ํ–ˆ๋Š”๋ฐ target๋ณด๋‹ค ํฌ๋ฉด ๊ทธ๋ƒฅ ๋ฆฌํ„ดํ•œ๋‹ค.
16+
// target๋ณด๋‹ค ์ž‘์€๊ฒƒ์— ๋Œ€ํ•ด์„œ ๋„ฃ๋Š”๋‹ค.
17+
const ret = []
18+
function dp(total,newNum,currentArr){
19+
if(total + newNum > target){
20+
return
21+
}
22+
if(total + newNum == target && ){
23+
ret.push([...currentArr,newNum]);
24+
return
25+
}
26+
27+
//๋‘ ๊ฐ€์ง€ ์–ด๋А๊ฒƒ์—๋„ ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ์žฌ๊ท€๋ฅผ ๋˜ ๋‹ค์‹œ ๋ˆ๋‹ค.
28+
for(let i = 0; i<candidatesLength; i++){
29+
dp(total+newNum , candidates[i],[...currentArr,candidates[i]])
30+
}
31+
}
32+
dp(0,0,[])
33+
return ret
34+
};
35+
36+
//์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค.
37+
// ์ค‘๋ณต์ด ์ƒ๊ธด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋–ป๊ฒŒ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉด ์ข‹์„๊นŒ?
38+
/**
39+
* 1. Set์„ ์ด์šฉํ•œ๋‹ค.
40+
* 2. ์ˆœ์„œ๋ฅผ ๋‘”๋‹ค. idx๋ฅผ dfs์— ๋„˜๊ฒจ์ฃผ์–ด์„œ, ์ˆœ์„œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ฒŒ ํ•œ๋‹ค.
41+
*/
42+
43+
var combinationSum = function(candidates, target) {
44+
const candidatesLength = candidates.length
45+
const ret = []
46+
function dp(idx,total,currentArr){
47+
if(total > target){
48+
return
49+
}
50+
if(total == target){
51+
ret.push(currentArr);
52+
return
53+
}
54+
55+
//idx๋ฅผ ๋„˜๊ฒจ๋ฐ›์•„์„œ, ๊ทธ ์ดํ›„์˜ ๊ฒƒ์—๋งŒ(์ž๊ธฐ ์ž์‹  ํฌํ•จ) ๋Œ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ ˆ๋ฐ˜์ •๋„๋งŒ ๋ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
56+
for(let i = idx; i < candidatesLength; i++){
57+
dp(i,total+ candidates[i],[...currentArr,candidates[i]])
58+
}
59+
}
60+
dp(0,0,[])
61+
return ret
62+
};
63+
64+
65+
66+
/**
67+
์‹œ๊ฐ„๋ณต์žก๋„: O(N^(target/min)) : N๊ฐœ ํ›„๋ณด ์ค‘ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ target/min ๊นŠ์ด๋งŒํผ ๋ฐ˜๋ณต
68+
๊ณต๊ฐ„๋ณต์žก๋„: O(target/min) : ์žฌ๊ท€ ์Šคํƒ์˜ ์ตœ๋Œ€ ๊นŠ์ด๊ฐ€ target/min
69+
70+
71+
*/
72+
73+
74+
// 2. dp๋ฅผ ํ™œ์šฉํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
75+
var combinationSum = function(candidates, target) {
76+
const dp = Array.from({length:target+1},()=>[])
77+
dp[0] = [[]];
78+
for(let candidate of candidates){
79+
//์—ฌ๊ธฐ์„œ candidate์— ๋Œ€ํ•ด์„œ, ์ดํ›„ ํƒ€๊ฒŸ๊นŒ์ง€ ๋”ํ•  ์ˆ˜์žˆ๋Š” ์ˆซ์ž์— ๋Œ€ํ•œ ์กฐํ•ฉ์—, candidate๋ฅผ ๊ฐ๊ฐ ๋„ฃ์–ด์ค€๋‹ค.
80+
for(let i = candidate; i <= target; i++){
81+
for(let comb of dp[i-candidate]){ //๊ฐ ์กฐํ•ฉ์— ๋„ฃ์–ด์คŒ
82+
dp[i].push([...comb,candidate])
83+
}
84+
}
85+
}
86+
return dp[target]
87+
};
88+
/**
89+
์‹œ๊ฐ„๋ณต์žก๋„: O(N ร— target ร— M)
90+
N๊ฐœ ํ›„๋ณด๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ ํ›„๋ณด๋งˆ๋‹ค target๊นŒ์ง€์˜ ๊ฐ’๋“ค์— ๋Œ€ํ•ด ๊ธฐ์กด ์กฐํ•ฉ๋“ค์„ ๋ณต์‚ฌํ•ด์„œ ์ƒˆ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ๊ธฐ์กด์˜ ์กฐํ•ฉ์˜ ์ˆ˜ M์„ ๊ณฑํ•ด์•ผํ•จ
91+
๊ณต๊ฐ„๋ณต์žก๋„: O(target ร— M)
92+
dp ๋ฐฐ์—ด์˜ ๊ฐ ์ธ๋ฑ์Šค์— ํ•ด๋‹น ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ์กฐํ•ฉ๋“ค์„ ์ €์žฅ. ์กฐํ•ฉ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ์„œ ์ปค์ง
93+
*/
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
var numDecodings = function(s) {
2+
if (s[0] === '0') return 0;
3+
4+
const n = s.length;
5+
const dp = new Array(n + 1).fill(0);
6+
dp[0] = 1; // ๋นˆ ๋ฌธ์ž์—ด. ๊ณ„๋‹จ์˜ ์ฒซ ์‹œ์ž‘๋ถ€๋ถ„์— 1์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ
7+
dp[1] = 1; // ์ฒซ ๊ธ€์ž๊ฐ€ 0์ด ์•„๋‹˜์€ ์œ„์—์„œ ํ™•์ธ
8+
//์œ„ ๋‘ ๊ฐ’์ด ๊ธฐ๋ฐ˜์ด ๋˜์–ด ๊ฐ ์ž๋ฆฌ์— ๋Œ€ํ•œ
9+
10+
for (let i = 2; i <= n; i++) {
11+
const one = Number(s.slice(i - 1, i)); // ํ•œ ๊ธ€์ž
12+
const two = Number(s.slice(i - 2, i)); // ๋‘ ๊ธ€์ž
13+
14+
if (one >= 1 && one <= 9) {
15+
dp[i] += dp[i - 1];
16+
}
17+
if (two >= 10 && two <= 26) { //๋‘์ž๋ฆฌ์ˆ˜ ์ผ ๋•Œ๋Š” dp[i-2]๋„ ๋”ํ•ด์ค€๋‹ค.
18+
dp[i] += dp[i - 2];
19+
}
20+
// ๊ฐ ์ž๋ฆฌ์˜ ๊ฐ’(dp[i])์€, 1๊ธ€์ž ๋””์ฝ”๋”ฉ ์‹œ ๋ฐ”๋กœ ์ „ ์ž๋ฆฌ(dp[i-1])์˜ ๊ฐ’๊ณผ, 2๊ธ€์ž ๋””์ฝ”๋”ฉ ์‹œ ๋‘ ์ž๋ฆฌ ์ „(dp[i-2])์˜ ๊ฐ’์„ ๋”ํ•ด์„œ ๋งŒ๋“ ๋‹ค. dp[i]๋Š” ๋„์ฐฉ์ง€์˜ ๊ฐœ๋…๊ฐ™์€ ๊ฒƒ
21+
22+
}
23+
24+
return dp[n];
25+
};
26+
27+
//์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
28+
//๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var maxSubArray = function(nums) {
6+
//์นด๋ฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜
7+
let currentSum = nums[0]
8+
let maxSum = nums[0]
9+
for(let i = 1; i<nums.length;i++){
10+
currentSum = Math.max(nums[i],currentSum+nums[i])
11+
maxSum = Math.max(maxSum,currentSum)
12+
}
13+
14+
return maxSum
15+
};
16+
17+
//์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
18+
//๊ณต๊ฐ„๋ณต์žก๋„: O(1)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
2+
3+
4+
//ํ’€์ด1. ๋‚˜๋จธ์ง€์™€ ๋ชซ์„ ์ด์šฉํ•œ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
5+
6+
/**
7+
* @param {number} n
8+
* @return {number}
9+
*/
10+
var hammingWeight = function(n) {
11+
let remain = n;
12+
let count = 0;
13+
while(remain){
14+
if(remain == 2 || remain ==1 ){
15+
count +=1;
16+
break;
17+
}
18+
if(remain %2 == 1){
19+
count +=1
20+
}
21+
remain = Math.floor(remain /2)
22+
}
23+
return count;
24+
};
25+
/*2์ง„๋ฒ•์„ ๊ตฌํ• ๋•Œ, ๋‚˜๋จธ์ง€๊ฐ€ 1์ผ๋•Œ๋งˆ๋‹ค count++ ํ•ด์ฃผ๊ณ ,
26+
๋งˆ์ง€๋ง‰์— 2๋‚˜ 1์ด ๋‚จ์œผ๋ฉด count ++ ํ•˜๊ณ  break ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
27+
28+
์ž…๋ ฅ ๊ฐ’์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(log n)
29+
๊ณต๊ฐ„๋ณต์žก๋„ O(1)
30+
*/
31+
32+
//ํ’€์ด 2. n์˜ ์ด์ง„์ˆ˜์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ 1๋น„ํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ๊ฑฐํ•˜์—ฌ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฐฉ๋ฒ•
33+
34+
/**
35+
* @param {number} n
36+
* @return {number}
37+
*/
38+
var hammingWeight = function(n) {
39+
//์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„๋•Œ, 1์˜ ๊ฐœ์ˆ˜?
40+
let count = 0;
41+
while (n !== 0) {
42+
n = n & (n - 1);
43+
count++;
44+
}
45+
return count
46+
};
47+
48+
/*
49+
์‹œ๊ฐ„๋ณต์žก๋„: O(k) : ์—ฌ๊ธฐ์„œ k๋Š” n์— ํฌํ•จ๋œ 1์˜ ๊ฐœ์ˆ˜
50+
๊ณต๊ฐ„๋ณต์žก๋„: O(1)
51+
*/
52+
53+
//์ด ์™ธ์—๋„ ๋น„ํŠธ์—ฐ์‚ฐ์ž, ๋น„ํŠธ๋งˆ์Šคํ‚น ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ O(1), O(logn)์œผ๋กœ ํ’€์ˆ˜์žˆ๋‹ค.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* @param {string} s
3+
* @return {boolean}
4+
*/
5+
6+
String.prototype.isAlphaNum = function() {
7+
return /^[a-z0-9]$/i.test(this);
8+
};
9+
var isPalindrome = function(s) {
10+
//chatAt์˜ ๋ฒ”์œ„์˜ string, number๋งŒ ๊ฑด์ง„๋‹ค
11+
const ss = s.split('').filter((x)=>x.isAlphaNum()).map(x=>x.toLowerCase())
12+
//๊ทธ ๋‹ค์Œ์—” index๋ฅผ ์–‘์ชฝ์—์„œ ๋น„๊ตํ•˜๊ธฐ
13+
for(let i=0;i<(ss.length/2);i++){
14+
console.log(ss[i],ss[ss.length-1-i])
15+
if(ss[i]!==ss[ss.length-1-i]) return false
16+
}
17+
return true
18+
};
19+
20+
// ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)
21+
// ๊ณต๊ฐ„ ๋ณต์žก๋„ O(N)
22+
23+
//2. ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ, ํ•„ํ„ฐ๋ง๊ณผ string ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํšจ์œจ์„ฑ ์˜ฌ๋ฆฌ๊ธฐ
24+
var isPalindrome = function(s) {
25+
let left = 0;
26+
let right = s.length - 1;
27+
//๊ฐ ํฌ์ธํ„ฐ๊ฐ€ ์˜์ˆซ์ž ๋ฌธ์ž๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์ด๋™
28+
while (left < right) {
29+
while (left < right && !s[left].isAlphaNum()) {
30+
left++;
31+
}
32+
while (left < right && !s[right].isAlphaNum()) {
33+
right--;
34+
}
35+
if (left < right && s[left].toLowerCase() !== s[right].toLowerCase()) {
36+
return false;
37+
}
38+
left++;
39+
right--;
40+
}
41+
42+
return true;
43+
};
44+
45+
// ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)
46+
// ๊ณต๊ฐ„ ๋ณต์žก๋„ O(1)
47+
48+
/*
49+
๋” ํšจ์œจ์ ์ด๊ฒŒ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•
50+
1. String.prototype ํ™•์žฅ ์ง€์–‘
51+
์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์—์„œ String.prototype ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์ง์ ‘์ ์ธ ํ—ฌํผ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ณด๋‹ค ์•„์ฃผ ๋ฏธ์„ธํ•˜๊ฒŒ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค (์‹ค์ œ๋กœ๋Š” ๊ฑฐ์˜ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€)
52+
53+
2. isAlphaNum ๋‚ด๋ถ€ ๋กœ์ง ์ตœ์ ํ™” (Micro-optimization)
54+
- ์ •๊ทœ ํ‘œํ˜„์‹ ์—”์ง„์ด ๋‚ด๋ถ€์ ์œผ๋กœ ํŒŒ์‹ฑ๋˜๊ณ  ์ปดํŒŒ์ผ๋˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ •๊ทœ ํ‘œํ˜„์‹, ๋‹จ์ˆœํ•œ ๋ฌธ์ž ๋ฒ”์œ„ ์ฒดํฌ์—๋Š” ๋ฌธ์ž ์ฝ”๋“œ(char code) ๋น„๊ต๊ฐ€ ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
55+
56+
*/

0 commit comments

Comments
ย (0)