풀이
입력으로 3가지의 경우가 입력될 수 있습니다.
1. 쇠막대기가 시작되는 부분 '('
2. 쇠막대기가 끝나는 부분 ')'
3. 레이저 "()"
레이저가 쇠막대기를 절단할 때 생기는 쇠막대기의 개수는 현재 쇠막대기가 몇 개 깔려있냐에 따라 다릅니다.
그림에서 처음 레이저를 발사할 때 총 3개의 쇠막대기가 깔려 있습니다.
'('가 3번 입력된 거죠.
그다음 레이저를 발사할 때도 동일하게 3개입니다.
그리고 쇠막대기가 끝나는 부분에도 절단된 쇠막대기가 1개 생깁니다.
#include<iostream>
using namespace std;
int main(void)
{
string s; cin >> s;
int len = s.length();
int res = 0, tmp = 0;
for (int i = 0; i < len; i++) {
if (s[i] == '(') tmp++;
else if (s[i] == ')' && s[i - 1] == '(') {
tmp--;
res += tmp;
}
else {
tmp--;
res += 1;
}
}
cout << res;
return 0;
}
반례
Input
(()()())
Output
4
Input
(((()()((((())())())())())))
Output
38
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 1260번: DFS와 BFS (0) | 2021.04.20 |
---|---|
[백준/C,C++] 9465번: 스티커 (0) | 2021.04.20 |
[백준/C,C++] 1850번: 최대공약수 (0) | 2021.04.20 |
[백준/C,C++] 5585번: 거스름돈 (0) | 2021.04.20 |
[백준/C,C++] 10610번: 30 (0) | 2021.04.20 |
댓글