어흥
[백준 10799] 쇠막대기 (C++) 본문
728x90
반응형
문제링크: www.acmicpc.net/problem/10799
1. 주의할 점
- 레이저가 쏘아질 때, 얼만큼 값이 추가되는지 확인한다
- 끝처리를 어떻게 할지 생각한다
2. 구현
- 레이저는 항상 () 형태로 입력되므로 '('다음에 ')'가 있으면 레이저, 없으면 쇠막대기의 연장선이라고 생각한다
- 쇠막대기면 Stack에 '('를 추가한다
- 레이저라면 Stack의 크기만큼 Result에 더한다(레이저를 기준으로 왼쪽 부분 추가)
- 쇠막대기가 끝났다면, Result++와 Stack에서 pop()을 수행한다
- 마지막이 쇠막대기로 끝났다면, 위의 연산에서 추가가 되지 않으므로(오른쪽 연산은 수행하지 않았으므로) Result에 Stack의 크기만큼 더한다
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
string str;
cin >> str;
stack<char> s;
int result = 0;
for (int i = 0; i < str.size(); i++) {
char c = str[i];
if (c == '(') {
if (str[i + 1] == ')') {
result += s.size();
i++;
}
else
s.push(c);
}
else {
result++;
s.pop();
}
}
result += s.size();
cout << result;
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 20366] 같이 눈사람 만들래? (C++) (0) | 2021.02.05 |
---|---|
[백준 1406] 에디터 (C++) (0) | 2021.01.13 |
[백준 9372] 상근이의 여행 (C++) (0) | 2021.01.12 |
[백준 2096] 내려가기 (C++) (0) | 2021.01.07 |
[백준 20422] 퀼린드롬 (Easy) (C++) (0) | 2021.01.04 |
Comments