1. 풀이방법
- 문제가 요구하는 사항을 구현하는 문제인데, 스택을 이용해서 현재 몇개의 막대가 쌓여있는지를 확인하였습니다.
- 사실 굳이 STACK.SIZE()를 그냥 임의의 변수 하나를 만들어 관리하면 그냥 반복문만으로도 구현 가능합니다.
2. 주의사항
- 조각의 개수가 증가하는 경우는 두가지 경우입니다.
- (1) 레이저가 자르는 경우 (2) 막대가 끝나는 경우
3. 나의코드
<stack이용>
#include<iostream>
#include<stack>
#include<algorithm>
#include<vector>
#include<queue>
#include<string>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
string s;
cin >> s;
stack<char> sarr;
int resultnum = 0;
for (int i = 0; i < s.length(); i++) {
if (sarr.empty()) { //비어있을 경우
sarr.push(s[i]); continue;
}
if (s[i] == ')'&&s[i-1]== '(') { //레이저
sarr.pop();
resultnum += sarr.size();
continue;
}
if (s[i] == '(') { //막대의 시작
sarr.push(s[i]);
}
else if (s[i] == ')') { //막대의 끝
sarr.pop();
resultnum++;
}
}
cout << resultnum << "\n";
return 0;
}
<변수로 관리>
#include<iostream>
#include<string>
using namespace std;
int main() {
int cnt = 0, result = 0;
string t;
cin >> t;
for (int i = 0; i < t.length(); i++) {
if (t[i] == '(') {
if (t[i + 1] == ')') {
i++;
result += cnt;
continue;
}
cnt++;
}
else {
cnt--;
result++;
}
}
cout << result;
return 0;
}
'알고리즘 문제풀이 > 스택' 카테고리의 다른 글
백준 1406 [C++] (0) | 2021.01.09 |
---|---|
백준 1874 [C++] (0) | 2021.01.09 |
백준 3986 (0) | 2020.03.02 |
백준 2493 (0) | 2020.01.08 |