Skip to content

Commit a4a91b3

Browse files
authored
Merge pull request #1644 from crumbs22/main
[crumbs22] Week 14 Solutions
2 parents a2c88d8 + e7e2f11 commit a4a91b3

File tree

4 files changed

+104
-0
lines changed

4 files changed

+104
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
queueλ₯Ό ν™œμš©ν•΄μ„œ μžμ‹ λ…Έλ“œμ˜ 수λ₯Ό μ„Έκ³ , 그만큼 λ°˜λ³΅λ¬Έμ„ λŒλ©΄μ„œ
3+
각 λ…Έλ“œμ˜ 값을 μ €μž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ 깊이순 트리 순회λ₯Ό κ΅¬ν˜„
4+
트리의 λͺ¨λ“  λ…Έλ“œλ₯Ό ν•œ λ²ˆμ”© λ°©λ¬Έν•˜λ―€λ‘œ O(n)의 μ‹œκ°„λ³΅μž‘λ„,
5+
트리의 λͺ¨λ“  λ…Έλ“œλ₯Ό μ €μž₯ν•˜λ―€λ‘œ O(n)의 곡간 λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.
6+
*/
7+
class Solution {
8+
public:
9+
vector<vector<int>> levelOrder(TreeNode* root) {
10+
queue<TreeNode*> q;
11+
vector<vector<int>> ans;
12+
if (!root)
13+
return ans;
14+
15+
q.push(root);
16+
while (!q.empty()) {
17+
vector<int> tmp;
18+
int size = q.size();
19+
for (int i = 0; i < size; i++) {
20+
TreeNode* child = q.front();
21+
q.pop();
22+
tmp.push_back(child->val);
23+
if (child->left)
24+
q.push(child->left);
25+
if (child->right)
26+
q.push(child->right);
27+
}
28+
ans.push_back(tmp);
29+
}
30+
return ans;
31+
}
32+
};

β€Žcounting-bits/crumbs22.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
n + 1번 λ°˜λ³΅ν•˜λ©° dp배열에 μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„λ³΅μž‘λ„ O(n), κ³΅κ°„λ³΅μž‘λ„ O(n)만큼 μ†Œμš”
3+
*/
4+
class Solution {
5+
public:
6+
vector<int> countBits(int n) {
7+
vector<int> dp(n + 1, 0); // 0λΆ€ν„° nκΉŒμ§€μ΄λ―€λ‘œ n + 1개 ν•„μš”, dp[0] = 0
8+
9+
// dp배열을 ν™œμš©, μ΅œμƒμœ„λΉ„νŠΈ + (λ§ˆμ§€λ§‰λΉ„νŠΈ&1)λ₯Ό dp에 μ €μž₯
10+
for (int num = 1; num < n + 1; num++) {
11+
dp[num] = dp[num >> 1] + (num & 1);
12+
}
13+
return dp;
14+
}
15+
};

β€Žhouse-robber-ii/crumbs22.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution {
2+
public:
3+
int rob(vector<int>& nums) {
4+
5+
if (nums.size() == 1)
6+
return (nums[0]);
7+
8+
// 첫번째 μ§‘ ~ λ§ˆμ§€λ§‰ - 1번째 μ§‘κΉŒμ§€
9+
int prev = 0;
10+
int curr = nums[0];
11+
12+
for (int i = 1; i + 1 < nums.size(); i++) {
13+
int tmp = curr;
14+
// λ°”λ‘œ μ „ 집을 ν„°λŠ” 게 λ‚˜μ€μ§€, μ „μ „λ²ˆμ§Έ μ§‘κ³Ό ν˜„μž¬(nums[i])집을 ν„°λŠ” 게 λ‚˜μ€μ§€ νŒλ³„
15+
curr = max(curr, prev + nums[i]);
16+
prev = tmp; // μ „μ „λ²ˆμ§Έ μ§‘μ˜ 값을 κ°±μ‹ 
17+
}
18+
int fstrob = curr;
19+
20+
// λ‘λ²ˆμ§Έ μ§‘ ~ λ§ˆμ§€λ§‰ μ§‘κΉŒμ§€
21+
prev = 0;
22+
curr = nums[1];
23+
for (int i = 2; i < nums.size(); i++) {
24+
int tmp = curr;
25+
curr = max(curr, prev + nums[i]);
26+
prev = tmp;
27+
}
28+
int scdrob = curr;
29+
30+
return max(fstrob, scdrob);
31+
}
32+
};

β€Žmeeting-rooms-ii/crumbs22.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
정렬에 O(nlogn), νž™ μ‚½μž… 및 μ‚­μ œμ— O(logn) μ†Œμš”λ˜λ―€λ‘œ 전체 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(nlogn)
3+
μ΅œλŒ€ n개의 νšŒμ˜κ°€ μžˆμ„ 수 μžˆμœΌλ―€λ‘œ 곡간 λ³΅μž‘λ„λŠ” O(n)
4+
*/
5+
class Solution {
6+
public:
7+
int minMeetingRooms(vector<Interval> &intervals) {
8+
if (intervals.empty())
9+
return 0;
10+
11+
sort(intervals.begin(), intervals.end()); // μ‹œμž‘ μ‹œκ°„ κΈ°μ€€ μ •λ ¬
12+
priority_queue<int, vector<int>, greater<int>> minHeap; // μ΅œμ†Œνž™μ— 회의 μ’…λ£Œ μ‹œκ°„ μ €μž₯
13+
14+
minHeap.push(intervals[0][1]);
15+
for (int i = 1; i < intervals.size(); i++) {
16+
int start = intervals[i][0];
17+
int end = intervals[i][1];
18+
19+
if (start >= minHeap.top()) // μž¬μ‚¬μš© κ°€λŠ₯ν•  λ•Œ pop
20+
minHeap.pop();
21+
minheap.push(end); // μƒˆλ‘œμš΄ 회의 μ’…λ£Œμ‹œκ°„ νž™μ— μΆ”κ°€
22+
}
23+
return minHeap.size();
24+
}
25+
};

0 commit comments

Comments
Β (0)