눈송이의 개발생활

[BOJ]10799 - 쇠막대기 (C++) 본문

Algorithm/BOJ

[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