[백준/C++] 10799번 쇠막대기

2021. 3. 23. 19:25알고리즘/구현

728x90
반응형

문제: www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

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

www.acmicpc.net

 

 

문제풀이

 

왼쪽부터 레이저를 만나면 현재까지의 쇠막대기 수(스택의 사이즈 -1 )를 결과값에 더해주고 쇠막대기의 끝에 도달하면 결과값에 1을 더해주었다.

 

( ( -> s.push(1)

( ) ->  result += s.size() - 1

) ) -> result++

 

 

코드

#include <iostream>
#include <stack>

using namespace std;

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);

    string str;
    cin>>str;

    int result = 0;
    stack<int> s;
    for(int i=0; i<str.length(); i++){
        if(str[i] == '('){
            s.push(1);
        }
        else{
            if(str[i-1] == '('){ //레이저로 현재까지의 쇠막대기를 자름 
                result += s.size()-1;
            }
            else{ //막대의 끝이므로 조각 한 개 플러스
                result++;
            }
            s.pop();
        }
    }

    cout<<result;

    return 0;
}

 

 

결과

 

728x90
반응형