개발/알고리즘

10799_쇠막대기

송디 2020. 11. 16. 10:52

www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

'(', ')' 를 이용하여 스택을 쌓는 문제이다. 정석은 스택을 이용하는 것이기에 스택을 이용하여 해주었다. 나는 스택 라이브러리를 사용하였는데 사람들이 해놓은 것을 보니 배열로 count 만 해주면 되기에 배열로 해줘도 되어보였다. 

이런 원리로 풀면 된다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
#include<string>
#include<stack>
 
using namespace std;
 
int main(void){
    string s;
    stack<char> st;
    int flag, ans;
 
    cin >> s;
    flag = 0;ans = 0;
    for(char c : s){
        if(c == ')' && flag == 1){
            st.pop(); ans += st.size(); flag = 0;
        }else if(c == '('){
            st.push(c); flag = 1;
        }else if(c == ')' && flag == 0){
            st.pop(); ans += 1;
        }
    }
    cout << ans << '\n';
}
 
cs
728x90

'개발 > 알고리즘' 카테고리의 다른 글

1373_이진수팔진수  (0) 2020.11.21
2745_진법변환  (0) 2020.11.18
10866_덱  (0) 2020.11.16
1158_요세푸스문제  (0) 2020.11.15
11656_접미사배열  (0) 2020.11.15