[백준] 쇠막대기 10799

Soohyeon B·2022년 11월 15일
0

알고리즘 문제 풀이

목록 보기
43/70

문제

  1. 쇠막대를 레이저로 절단한다.
  2. 절단시 다음 조건을 만족한다.
    1. 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다.
    2. 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다.
    3. 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다.
  3. 레이저와 쇠막대기의 배치는 괄호를 이용하여 표현할 수 있다.
    • 레이저는 괄호의 쌍으로 표현 ()
    • 쇠막대기의 왼쪽끝은 (, 오른쪽 끝은 )
  4. 쇠막대기와 레이저의 배치를 나타내는 괄호 표현이 주어졌을 때, 잘려진 쇠막대기 조각의 총 개수를 구하는 프로그램을 작성하시오.

입력

()(((()())(())()))(())
한 줄에 쇠막대기와 레이저의 배치를 나타내는 표현이 공백 없이 주어진다.

풀이

풀이1

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

int main (void){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    string str;
    cin >>str;
    stack<char> s;
    int ans =0;
    int isOpen=0; //()일 경우를 캐치하기 위한 flag
    
    for(auto c:str){
        if(c =='(') {
            isOpen=1;
            s.push(c);
        }
        else if(c==')'&& s.top()=='('){
            s.pop();
            //laser이면 stack에 있는 열린 막대 개수 다 더하기
            if(isOpen) {
                ans+=s.size();
            }
            
            //막대의 끝이면
            else  ans++;
            isOpen =0;
        }
    }
    cout << ans;
    
    return 0;
}
profile
하루하루 성장하는 BE 개발자

0개의 댓글