boj 2504 c++ 괄호의 값
백준 2504 cpp 괄호의 값
아이디어
- 한
line
을 받는다. temp = 1, ans = 0, bool iserror = false
을 선언한다.line[i
] 가(
이거나[
일 때에는 temp에2 or 3
을 곱하고, 스택에 넣는다.line[i]
가) or ]
일 때에는temp를
2 or 3으로나눈다
. 또, 스택에서 하나를 뺀다.- ans 에 temp 를 추가하는 시점은
line[i-1]
이 닫히는 괄호와 짝을 이룰 때이다. ) or ]
을 만났는데 스택이 비었거나 스택의 맨 위에 짝이 맞지 않는 경우iserror=true
해주고break
한다.(()()()
같은 경우를 대비해 for문을 빠져 나왔을 때에도 Stack이 비었는지 확인해준다.- ans를 출력한다.
#include <bits/stdc++.h>
using namespace std;
string line;
stack<char> S;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> line;
int temp = 1;
int ans = 0;
bool iserror = false;
for (int i = 0; i < line.size(); i++)
{
char c = line[i];
if (c == '(')
{
temp *= 2;
S.push(c);
}
else if (c == '[')
{
temp *= 3;
S.push(c);
}
else if (c == ')')
{
if (S.empty() || S.top() != '(')
{
iserror = true;
break;
}
else
{
if (line[i-1] == '(')
ans += temp;
temp /= 2;
S.pop();
}
}
else // (c == ']')
{
if (S.empty() || S.top() != '[')
{
iserror = true;
break;
}
else
{
if (line[i-1] == '[')
ans += temp;
temp /= 3;
S.pop();
}
}
}
if (iserror == true || !S.empty())
cout << 0;
else
cout << ans;
}
'Algorithm' 카테고리의 다른 글
boj 4889 c++ 안정적인 문자열 (0) | 2020.09.04 |
---|---|
boj 9012 c++ 괄호 (0) | 2020.09.03 |
boj 10799 c++ 쇠막대기 (0) | 2020.08.31 |
BOJ 1021 c++ 회전하는 큐 (0) | 2020.08.29 |
BOJ 2164 c++ 카드 2 (0) | 2020.08.26 |
최근댓글