'(' 및 ')'만 포함하는 문자열 s가 있다고 가정하고 문자열을 균형 있게 만들기 위해 삽입할 수 있는 최소 괄호 수를 찾아야 합니다.
따라서 입력이 "(()))("와 같으면 출력은 "(()))("와 같이 2가 되며 "((()))()"와 같이 균형을 이룰 수 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
:=0, cnt :=0
-
initialize i :=0의 경우, i
-
s[i]가 '('와 같으면 -
-
(o 1씩 증가)
-
-
그렇지 않으면
-
o가 0이 아닌 경우 -
-
(o를 1만큼 감소)
-
-
그렇지 않으면
-
(cnt를 1씩 증가)
-
-
-
-
cnt + o를 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(string s) {
int o = 0;
int cnt = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] == '('){
o++;
} else {
if(o)
o--;
else
cnt++;
}
}
return cnt + o;
}
};
int main(){
Solution ob;
cout << (ob.solve("(()))("));
} 입력
Input:
"(()))(" 출력
2