본문 바로가기
개발/알고리즘

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

by JeonJaewon 2020. 1. 23.

 

굳이 스택을 이용하지 않고 문자열만 다루어서 풀 수도 있는 문제였다.

여는 괄호는 일단 스택에 넣어준다.

그리고 닫는 괄호를 기준으로 생각해 보면, ( ) 처럼 연달아서 여는 괄호, 닫는 괄호가 나올 경우 레이저를 뜻하고, ) ) 처럼 닫는 괄호들이 이어진다면 이는 막대기의 끝 부분을 의미한다.

 

레이저의 경우는 현재 스택의 크기만큼의 조각이 생기고 (18번째 줄) , 막대기의 끝 부분일 경우 해당 막대기의 끝 부분, 즉 1개의 조각이 더 생긴다. (20번째 줄)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <stack>
#include <string>
 
using namespace std;
int main() {
    stack<char> pipes;
    string inputStr;
    int sum = 0;
    cin >> inputStr;
    for (int i = 0; i < inputStr.size(); i++) {
        char ch = inputStr.at(i);
        if (ch == '('
            pipes.push(ch);
        else if (ch == ')') {
            pipes.pop();
            if (inputStr.at(i - 1== '(')  // 레이저 
                sum += pipes.size();
            else if (inputStr.at(i - 1== ')'
                sum++;
        }
    }
    cout << sum << endl;
}
cs

 

 

댓글