File tree Expand file tree Collapse file tree 5 files changed +188
-0
lines changed Expand file tree Collapse file tree 5 files changed +188
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ ํ์ด :
3+ target + 1๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์ผ์ค๋ฒกํฐ dp๋ฅผ ๋ง๋ ๋ค
4+ dp[n] = dp[n - candidate]์ ๊ฐ ์กฐํฉ์ candidate๋ฅผ ์ถ๊ฐํ๋ ๋ก์ง์ผ๋ก ์์๋๊ฐ ๊ฒ์ด๋ค
5+ dp[n - c]๊ฐ [comb1, comb2]์ผ ๋ dp[n]์ [comb1.push_back(c), comb2.push_back[2]]
6+
7+ dp[0]์ ์ฐ์ฐ์ ์ํด ๋น ์ด์ค ๋ฒกํฐ๋ก ์ด๊ธฐํ ( dp[n] = dp[n - n] = dp[0] --> [[].push_back(n)])
8+
9+ targetํฌ๊ธฐ : T, candidate ๊ฐฏ์ : N
10+
11+ TC : O(T * N)
12+
13+ SC : O(T * N)
14+ */
15+
16+ #include < vector>
17+ using namespace std ;
18+
19+ class Solution {
20+ public:
21+ vector<vector<int >> combinationSum (vector<int >& candidates, int target) {
22+ vector<vector<vector<int >>> dp (target + 1 );
23+ dp[0 ] = {{}};
24+ for (int candidate : candidates)
25+ {
26+ for (int num = candidate; num <= target; num++)
27+ {
28+ for (auto & combination : dp[num - candidate])
29+ {
30+ vector<int > new_comb = combination;
31+ new_comb.push_back (candidate);
32+ dp[num].push_back (new_comb);
33+ }
34+ }
35+ }
36+ return dp[target];
37+ }
38+ };
Original file line number Diff line number Diff line change 1+ /*
2+ ํ์ด :
3+ i ๋ฒ์งธ ์ฐ์ฐ์ ์์ ์ cur๋ i + 1์์ ์์ํ๋ ๊ฒฝ์ฐ์ ์, nxt์๋ i + 2์์ ์์ํ๋ ๊ฒฝ์ฐ์ ์ ์ ์ฅ๋ผ์๋ค
4+ i ๋ฒ์งธ ์ฐ์ฐ์ด ๋๋ ํ cur๋ i์์ ์์ํ๋ ๊ฒฝ์ฐ, nxt์๋ i + 1์์ ์์ํ๋ ๊ฒฝ์ฐ์ ์ ์ ์ฅ๋๋๋ก ํ๋ค
5+ s์ ๊ธธ์ด๊ฐ 1์ผ ๋ ๋ฌด์กฐ๊ฑด 1๊ฐ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ์ง๋ฏ๋ก cur 1๋ก ์ด๊ธฐํ
6+
7+ ์ธ๊ฐ์ง ๊ฒฝ์ฐ์ ์
8+ 1. s[i]๊ฐ '0' ์ผ๋ 0์ผ๋ก ์์ํ๋ ๋ฌธ์์ด์ ํด์๊ฐ๋ฅํ ์๊ฐ ์์ผ๋ฏ๋ก cur๋ฅผ 0์ผ๋ก ํ๋ค
9+ 2. s[i]๋ก ์์ํ๋ ๋ ์๋ฆฌ ์๊ฐ ์ซ์๋ก ๋ณํํ๋ฉด 27๋ณด๋ค ์์ผ๋ฉด, 1์๋ฆฌ๋ก ๋ณํํ๋ ๊ฒฝ์ฐ์ ์(cur) + 2์๋ฆฌ๋ก ๋ณํํ๋ ๊ฒฝ์ฐ์ ์(nxt)๋ก cur ๋ณ๊ฒฝ
10+ 3. ๊ทธ ์ธ์๋ 1์๋ฆฌ๋ก ๋ณํํ๋ ๊ฒฝ์ฐ์ ์ ๋ฐ์ ์์ผ๋ฏ๋ก cur ๊ทธ๋๋ก
11+
12+ ๋ฌธ์์ด ๋์์ ์กฐ๊ฑด์ ๋ง์ถฐ ์
๋ฐ์ดํธ ํ๋ฉด์ ๋ฌธ์์ด ์ฒ์๊น์ง ์ํํ๊ณ cur ๋ฆฌํดํ๋ค
13+
14+ ๋ฌธ์์ด ๊ธธ์ด N
15+
16+ TC : O(N)
17+ ๋ฌธ์์ด ํ๋ฒ ์ํ
18+
19+ SC : O(1)
20+ */
21+
22+ #include < string>
23+ using namespace std ;
24+
25+ class Solution {
26+ public:
27+ int numDecodings (string s) {
28+ int cur = 1 ;
29+ int nxt = 0 ;
30+ int tmp;
31+
32+ for (int i = s.size () - 1 ; i >= 0 ; i--)
33+ {
34+ tmp = nxt;
35+ if (s[i] == ' 0' )
36+ {
37+ nxt = cur;
38+ cur = 0 ;
39+ }
40+ else if (i < s.size () - 1 && stoi (s.substr (i, 2 )) < 27 )
41+ {
42+ nxt = cur;
43+ cur = cur + tmp;
44+ }
45+ else
46+ {
47+ nxt = cur;
48+ }
49+ }
50+ return cur;
51+ }
52+ };
Original file line number Diff line number Diff line change 1+ /*
2+ ํ์ด :
3+ max_sum์ INT_MIN์ผ๋ก ์ด๊ธฐํ
4+
5+ ์๋ฅผ ์ํํ๋ฉด์ sum์ num์ ๋ํ๋ค(subarray์ ํฉ)
6+ max_sum๊ณผ ํ์ฌ subarrayํฉ์ ๋น๊ตํด ์
๋ฐ์ดํธํ๋ค
7+
8+ subarray์ ํฉ์ด 0๋ณด๋ค ์์ผ๋ฉด ์๋ก์ด subarray๋ฅผ ์์ํ๊ธฐ ์ํด sum์ 0์ผ๋ก ์ด๊ธฐํํ๋ค
9+
10+ nums์ ๊ธธ์ด N
11+
12+ TC : O(N)
13+
14+ SC : O(1)
15+ */
16+
17+ #include < vector>
18+ #include < limits.h>
19+ using namespace std ;
20+
21+ class Solution {
22+ public:
23+ int maxSubArray (vector<int >& nums) {
24+ int max_sum = INT_MIN;
25+ int sum = 0 ;
26+
27+ for (auto & num : nums)
28+ {
29+ sum += num;
30+ if (max_sum < sum)
31+ max_sum = sum;
32+ if (sum < 0 )
33+ sum = 0 ;
34+ }
35+ return max_sum;
36+ }
37+ };
Original file line number Diff line number Diff line change 1+ /*
2+ ํ์ด :
3+ ์ฌํํธ ์ฐ์ฐ์ผ๋ก n์ ๊ฐ์ ์ํค๋ฉด์ n ๊ณผ 1์ & ์ฐ์ฐ์ด true์ธ ๊ฐฏ์๋ฅผ ์ธ์ ๋ฆฌํด
4+
5+ TC : O(1)
6+ n์ด ์ปค๋ ์ต๋ 32๋ฒ์ ๋ฐ๋ณต๋ฌธ
7+
8+ SC : O(1)
9+ */
10+
11+ class Solution {
12+ public:
13+ int hammingWeight (int n) {
14+ int cnt = 0 ;
15+ while (n > 0 )
16+ {
17+ if (n & 1 )
18+ cnt++;
19+ n = n >> 1 ;
20+ }
21+ return cnt;
22+ }
23+ };
Original file line number Diff line number Diff line change 1+ /*
2+ ํ์ด :
3+ alnum์ธ ๋ฌธ์๋ค๋ง ์ถ์ถํด์ ์๋ฌธ์๋ก ๋ง๋ค์ด alnu_s๋ฅผ ๋ง๋ฌ
4+ ์ ๋์ด ๊ฐ์ ๋ฌธ์์ผ ๋์ left++, right-- ์ค์
5+ ๊ฐ์ง ์์ผ๋ฉด false, ์ ๋์ด ์๋ ด๋์ ์๋ก ๋ง๋๋ค๋ฉด true
6+
7+ ๋ฌธ์ ๊ธธ์ด N
8+
9+ TC : O(N)
10+
11+ SC : O(N)
12+ */
13+
14+ #include < string>
15+ using namespace std ;
16+
17+ class Solution {
18+ public:
19+ bool isPalindrome (string s) {
20+ string alnu_s = " " ;
21+
22+ for (char c : s)
23+ {
24+ if (isalnum (c))
25+ alnu_s += tolower (c);
26+ }
27+ int left = 0 ;
28+ int right = alnu_s.size () - 1 ;
29+ while (left < right)
30+ {
31+ if (alnu_s[left] != alnu_s[right])
32+ return false ;
33+ left++;
34+ right--;
35+ }
36+ return true ;
37+ }
38+ };
You canโt perform that action at this time.
0 commit comments