눈송이의 개발생활
[BOJ]10799 - 쇠막대기 (C++) 본문
문제
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을 총 막대 개수에 더한다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]2346 - 풍선 터뜨리기 (C++) (0) | 2022.01.05 |
---|---|
[BOJ]3078 - 좋은 친구 (C++) (0) | 2022.01.04 |
[BOJ]10828 - 스택 (C++) (0) | 2022.01.04 |
[BOJ]1448 - 삼각형 만들기 (C++) (0) | 2022.01.04 |
[BOJ]11582 - 치킨 TOP N (C++) (0) | 2022.01.04 |
Comments