알고리즘/BOJ

[c/c++] BOJ 10799번 문제 - 쇠막대기

wonjun.Aden 2022. 3. 7. 23:38

https://www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

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

www.acmicpc.net

문제

문제풀이

#include <bits/stdc++.h>
using namespace std;

//쇠막대기
//여러 개의 쇠막대기를 레이저로 절단하려고 함.
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    long long ans=0;

    string s;
    cin >> s;
    stack<char> st;
    for(int i=0;i<s.size();i++){
        if(s[i] == '('){
            st.push(s[i]);
        }else{
            if(s[i-1] == '('){
                st.pop();
                ans += st.size();
            }else{
                st.pop();
                ans++;
            }
        }
    }
    cout << ans;

    return 0;
}

문제의 포인트

  • 레이저가 표현되면 스택의 사이즈가 절단되는 막대의 갯수!!
  • s[i-1]이 왜 필요한지 생각해보기
반응형