쇠막대기
- 괄호를 통해 쇠막대기와 레이저를 표현하고 총 몇조각으로 나뉘어졌는 지 확인하는 문제
[풀이]
1) 괄호가 '('인 경우 stack에 pop하고
2) 괄호가 ')'인 경우 2가지로 나누어 처리
2-1) 직전에 열리고 닫힌 '()'인 경우 stack에 저장된 갯수 -1개 만큼 총 수에 더한다.
2-2) 직전에 열린게 아니면 총 수에 1을 더한다.
2-fin) 2-1, 2-2 작업 후 스택에 pop을 하여 하나를 빼낸다.
[결과]
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
stack<char> stOpen;
string input;
cin >> input;
int result = 0;
char preChar = NULL;
for (auto ch : input)
{
if (ch == '(')
{
stOpen.push(ch);
}
else
{
if (preChar == '(')
{
result += stOpen.size() - 1;
}
else
{
result++;
}
stOpen.pop();
}
preChar = ch;
}
cout << result << endl;
return 0;
}
'서버개발자 역량 > 알고리즘' 카테고리의 다른 글
생각 ] 동시작업 서버 설계 (0) | 2019.12.19 |
---|---|
알고리즘 ] BFS 알고리즘 (백준 1926 - 그림 문제) (0) | 2019.12.12 |
알고리즘 ] 백준 9012번 - 괄호 (0) | 2019.12.09 |
알고리즘 ] c++ 소수점자리 표현 (0) | 2019.11.22 |
알고리즘 ] 5. DP (0) | 2019.09.27 |