코딩테스트 연습/Baekjoon
[Baekjoon] 10799번: 쇠막대기 (c++)
수기
2022. 3. 31. 19:28
https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
- (이 들어오면 스택에 (를 push한다
- ) 가 들어오면 그전에있는 stack을 확인해서 (이면 st의 사이즈를 더한다 (레이저)
- ) 가 들어오면 그전에있는 stack을 확인해서 )이면 1을 더한다 (파이프의 끝)
if( st.top() == '(') cnt += st.size();
에서 스택이 비어있을때 top을 참조하면 런타임 에러가 남 => if(!st.empty()) 조건을 추가해서 해결
코드
#include <iostream>
#include <stack>
using namespace std;
int main(int argc, const char *argv[])
{
string input;
int cnt=0;
stack<int> st;
getline(cin, input);
for(int i=0;i<100001;i++){
if(input[i] == '\0') break;
if(input[i] == '(') st.push('(');
else if(input[i] == ')' && input[i-1] == '(') {
st.pop();
if(!st.empty()){
if( st.top() == '(') cnt += st.size();
}
}
else if(input[i] == ')' && input[i-1] == ')') { //파이프
st.pop();
cnt += 1;
}
}
cout<< cnt;
return 0;
}