백준 2504번 괄호의 값
문제: https://www.acmicpc.net/problem/2504
내코드
- A(B+C) = A*B + A*C 를 활용
- 변수 mul에 곱해야 하는 값을 저장해두고 (가 추가되면 *2, [가 추가되면 *3을 해줌
- ), ]가 나오면 두가지로 나눠서 생각
- 앞에가 (,[이면 바로 숫자로 바꿔서 mul값을 곱해준후 pop, 그 후 위에서 곱해준 2, 3의 값을 나눠준후 다시 밑에서 () = 2, [] = 3 값을 곱해줘야하니 별다른 처리 안하고 sum += mul;
- 앞에가 (,[이 아니면 error체크만 해준뒤 pop해준 후 mul값을 2,3으로 다시 나눠줌.
- 만약 스택이 비어있으면 괄호가 닫힐수가 없으므로 error
- input 값에서 i가 ), ]일때 i-1번째 값이 (,[일수 있고 ),]일수 있으니까 한번에 mul /= 2해주기
- 마지막에 스택이 비어있지 않으면 error, 비어있으면 sum 값 출력.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
stack<char> stk;
int sum = 0;//result
int mul = 1;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
string input;
cin >> input;
int length = input.length();
for (int i = 0; i < length; i++) {
if (input[i] == '(') {
mul *= 2;
stk.push('(');
}
else if (input[i] == '[') {
mul *= 3;
stk.push('[');
}
else if (input[i] == ')') {
if (input[i - 1] == '(') {
sum += mul;
}
if (stk.empty()) return !printf("0");
if (stk.top() == '(') stk.pop();
mul /= 2;
}
else if (input[i] == ']') {
if (input[i - 1] == '[') {
sum += mul;
}
if (stk.empty()) return !printf("0");
if (stk.top() == '[') stk.pop();
mul /= 3;
}
}
//if not empty return 0
cout << (stk.empty() ? sum : 0);
return 0;
}
참고
https://blockdmask.tistory.com/362
http://choonslife.blogspot.com/2018/07/2504.html
http://wookje.dance/2018/01/25/boj-2504-%EA%B4%84%ED%98%B8%EC%9D%98-%EA%B0%92/
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 1926번 그림 (0) | 2020.02.21 |
---|---|
[BaekJoon]백준 2493번 탑 (0) | 2020.01.28 |
[BaekJoon] 백준 10799번 쇠막대기 (0) | 2019.12.12 |
[BaekJoon]백준 9012번 괄호 (0) | 2019.12.03 |
[BaekJoon]백준 5430번 AC - C++, Python (0) | 2019.12.03 |