algorithm

[C++] 백준 알고리즘 10799번 (쇠막대기)

Dev:P 2019. 1. 20. 12:39
반응형

문제

 

 


이번에 다뤄볼 문제는 10799번 문제 '쇠막대기'입니다.

쇠막대기 문제에서 연습해야 하는 key-point는 스택입니다

 

쉽게 생각해보면 어렵지 않게 풀 수 있는 문제입니다.

레이저가 생기는 순간까지 몇개의 쇠막대기가 열려있는지를 판단하면 됩니다.

 

문제에서 주어진 예시를 보면 첫번째 레이저에서는 잘라지는 막대기가 존재하지 않습니다.

그러나 두번째 레이저를 보면 3개의 쇠막대기가 열려있는걸 볼 수 있습니다.

그럼 두번째 레이저에 의해 3개의 조각이 나올 수 있습니다.

세번째 레이저에서도 여전히 3개의 레이저가 열려있습니다.

그러므로 3개의 조각이 더 나오게 됩니다.

 

아래 해답 코드를 보면 더 쉽게 이해할 수 있으실 겁니다.


 

코드(C++)

#include<iostream>
#include<string>
using namespace std;
 
int main() {
    string str;
    char stack[100001];
    int top = -1;
    int bar = 0, slice = 0;
    int check = 0;
 
    cin >> str;
 
    for (int i = 0; i < (int)str.length(); i++) {
        if (str.at(i) == '(') {
            stack[++top] = str.at(i);
            bar++;
            check = 1;
        }
        else {
            bar--;
            stack[top--];
            if (check == 1) {
                slice = slice + bar;
                check = 0;
            }
            else {
                slice += 1;
                check = 0;
            }
        }
    }
 
    cout << slice << endl;
 
 
    return 0;
}
 

 

 

반응형