Algorithm/BOJ
[BOJ]10799 - 쇠막대기 (C++)
꾸지새미언니
2022. 1. 4. 17:48
문제
https://www.acmicpc.net/problem/10799
코드
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(void){
cin.tie(0);cout.tie(0);
ios_base::sync_with_stdio(false);
stack<char> s;
string str;
int sum=0;
cin >> str;
for(int i =0; i< str.length(); i++){
if(str.at(i) == '(') {
s.push(str.at(i));
}
else{
if(str.at(i-1) == '('){
s.pop();
sum += s.size();
} else{
s.pop();
sum +=1;
}
}
}
cout << sum;
}
풀이
()
이 하나의 레이저를 표현하기 때문에 index를 생각하면서 입력받은 문자열은 stack에 넣었다.(
이 오면 stack에 넣고 하나의 막대기를 상징한다고 생각한다.)
이 오는 경우, 만약 이 문자열의 바로 전 인덱스의 char가 (
이면 레이저라는 의미이기 때문에 지금까지 스택에 있는 막대기를 두 동강 낸다고 생각한다.
전 인덱스가 (
가 아니면 막대기가 끝났다는 의미이므로 그냥 1을 총 막대 개수에 더한다.