https://leetcode.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings/
[풀이] Greedy
문제해석이 어려운 문제.
결론적으로 어떤 VPS를 A,B 두 VPS로 나누는 문제. 이 때 depth(A,B)가 최소가 되도록 나누어야 한다.
처음엔 당연히 연속되는 괄호들로 나눠야 한다고 생각했는데
예제를 보니 ()(())() 와 같이 나눠도 된다.
depth를 가장 작게 하려면 겹치는 괄호를 최소한으로 만들어야 한다.그러려면 stack에 여는 괄호를 넣을 때 0,1,0,1 이런식으로 차례대로 넣어주면 된다.닫는 괄호는 여는 괄호와 같은 그룹에 들어가야 하므로 top과 같은 값으로 설정해주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stack> #include <cstdio> #include <vector> #include <algorithm> #include <string> using namespace std; class Solution { public: vector<int> maxDepthAfterSplit(string seq) { vector<int> ans(seq.size()); stack<int> a; for (int i = 0; i < seq.size(); i++) { char c = seq[i]; if (c == '(') { if (a.empty()) a.push(0); else a.push(1 - a.top()); ans[i] = a.top(); } else { ans[i] = a.top(); a.pop(); } } return ans; } }; | cs |
'Problem-Solving > LeetCode' 카테고리의 다른 글
[Leetcode] 419. Battleships in a Board (0) | 2020.07.28 |
---|---|
[Leetcode] 1387. Sort Integers by The Power Value (C++) (0) | 2020.07.07 |
[Leetcode] 1448. Count Good Nodes in Binary Tree (C++) (0) | 2020.06.28 |
[Leetcode] 1476. Subrectangle Queries (0) | 2020.06.21 |