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;
}
'코딩테스트 연습 > Baekjoon' 카테고리의 다른 글
[Baekjoon] 10809번: 알파벳 찾기 (c++) (0) | 2022.03.31 |
---|---|
[Baekjoon] 10808번: 알파벳 개수 (0) | 2022.03.31 |
[Baekjoon] 3584번: 가장 가까운 공통 조상 (0) | 2022.02.21 |
[Baekjoon] 1593번: 문자 해독(c++) (0) | 2022.02.18 |
[Baekjoon]20413번: MVP 다이아몬드 (easy)(c++) (0) | 2022.02.14 |