algorithm
[C++] 백준 알고리즘 10799번 (쇠막대기)
TechBy
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;
}
반응형