https://www.acmicpc.net/problem/2504
๋ฌธ์
4๊ฐ์ ๊ธฐํธ ‘(’, ‘)’, ‘[’, ‘]’๋ฅผ ์ด์ฉํด์ ๋ง๋ค์ด์ง๋ ๊ดํธ์ด ์ค์์ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋๋ค.
- ํ ์์ ๊ดํธ๋ก๋ง ์ด๋ฃจ์ด์ง ‘()’์ ‘[]’๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ค.
- ๋ง์ผ X๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ฉด ‘(X)’์ด๋ ‘[X]’๋ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด ๋๋ค.
- X์ Y ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ผ๋ฉด ์ด๋ค์ ๊ฒฐํฉํ XY๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด ๋๋ค.
์๋ฅผ ๋ค์ด ‘(()[[]])’๋ ‘(())[][]’ ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด์ง๋ง ‘([)]’ ๋ ‘(()()[]’ ์ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด ์๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ค ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด X์ ๋ํ์ฌ ๊ทธ ๊ดํธ์ด์ ๊ฐ(๊ดํธ๊ฐ)์ ์๋์ ๊ฐ์ด ์ ์ํ๊ณ ๊ฐ(X)๋ก ํ์ํ๋ค.
- ‘()’ ์ธ ๊ดํธ์ด์ ๊ฐ์ 2์ด๋ค.
- ‘[]’ ์ธ ๊ดํธ์ด์ ๊ฐ์ 3์ด๋ค.
- ‘(X)’ ์ ๊ดํธ๊ฐ์ 2×๊ฐ(X) ์ผ๋ก ๊ณ์ฐ๋๋ค.
- ‘[X]’ ์ ๊ดํธ๊ฐ์ 3×๊ฐ(X) ์ผ๋ก ๊ณ์ฐ๋๋ค.
- ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด X์ Y๊ฐ ๊ฒฐํฉ๋ XY์ ๊ดํธ๊ฐ์ ๊ฐ(XY)= ๊ฐ(X)+๊ฐ(Y) ๋ก ๊ณ์ฐ๋๋ค.
์๋ฅผ ๋ค์ด ‘(()[[]])([])’ ์ ๊ดํธ๊ฐ์ ๊ตฌํด๋ณด์. ‘()[[]]’ ์ ๊ดํธ๊ฐ์ด 2 + 3×3=11 ์ด๋ฏ๋ก ‘(()[[]])’์ ๊ดํธ๊ฐ์ 2×11=22 ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ‘([])’์ ๊ฐ์ 2×3=6 ์ด๋ฏ๋ก ์ ์ฒด ๊ดํธ์ด์ ๊ฐ์ 22 + 6 = 28 ์ด๋ค.
์ฌ๋ฌ๋ถ์ด ํ์ด์ผ ํ ๋ฌธ์ ๋ ์ฃผ์ด์ง ๊ดํธ์ด์ ์ฝ๊ณ ๊ทธ ๊ดํธ๊ฐ์ ์์์ ์ ์ํ๋๋ก ๊ณ์ฐํ์ฌ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ดํธ์ด์ ๋ํ๋ด๋ ๋ฌธ์์ด(์คํธ๋ง)์ด ์ฃผ์ด์ง๋ค. ๋จ ๊ทธ ๊ธธ์ด๋ 1 ์ด์, 30 ์ดํ์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ทธ ๊ดํธ์ด์ ๊ฐ์ ๋ํ๋ด๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ผ ์ ๋ ฅ์ด ์ฌ๋ฐ๋ฅด์ง ๋ชปํ ๊ดํธ์ด์ด๋ฉด ๋ฐ๋์ 0์ ์ถ๋ ฅํด์ผ ํ๋ค.
ํ์ด
(1)
์ฐ์ ๊ดํธ๊ฐ ์ ๋๋ก ๋์ด์๋๊ฐ๋ฅผ ํ๋จํด์ ์๋๊ฒฝ์ฐ 0์ด ๋๋๋ก ๋ง๋ ๋ค
ํ์ํ๋ค๋ฉด ์ฐธ๊ณ
(2)
๋ณธ ๋ฌธ์ ๋ "๋ถ๋ฐฐ๋ฒ์น"์ ๋์์ ํ๋ฉด์ ํธ๋ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค
๊ดํธ๊ฐ ์ด๋ฆด๋๋ง๋ค ๊ทธ ์์ ์์๋ค์ ๊ณฑํด์ง ๊ฒ์ ๋ฏธ๋ฆฌ mul ์ด๋ผ๋ ๋ณ์์ ๊ณฑํด๋๋๊ฒ์ด๋ค
(3)
๊ดํธ๊ฐ ๋ซํ๋ฉด
1. ์๋ ๋ฐ๋ก ์์ ์ง์ด ์๋ ๊ฒฝ์ฐ -> ์์ (2๋ 3) ์ธ ๊ฒฝ์ฐ์ด๋ฏ๋ก mul์ ์๋ ๊ณผ ๊ณฑํด์ ธ์ ans ์ ๋ํด์ง
2. 1์ด ์๋๊ฒฝ์ฐ -> ์์๋ฅผ ํฌํจํ๊ณ ์๋ ๊ดํธ์ด๋ฏ๋ก ๊ทธ๋ฅ ์์ ํ ๋ซํ๋ค
( mul์ ๋ณธ์ธ ์ง์ด ์ด๋ฆฌ๋ฉด์ ๊ณฑํด๋์ ๋ถ๋ถ์ ๋๋๊ธฐ๋ก ์์์ํค๋ฉด์ ์์ ํ ๋ ๋๊ธฐ (pop) )
// Authored by : seondal
// Co-authored by : -
//#include <bits/stdc++.h>
#include <iostream>
#include <stack>
using namespace std;
int ans;
stack<char> s;
int main() {
int ans = 0;
int mul = 1;
string input;
cin >> input;
for(int i=0; i<input.size(); i++){
if(input[i] == '(') {
// (2)
mul *= 2;
s.push('(');
}
else if(input[i] == ')') {
if(s.empty() || s.top() != '(') {
// (1)
cout << 0;
return 0;
}
// (3)
if(input[i-1] == '(') {
mul /= 2;
s.pop();
ans += mul*2;
} else {
mul /= 2;
s.pop();
}
}
else if(input[i] == '[') {
// (2)
mul *= 3;
s.push('[');
}
else if(input[i] == ']') {
if(s.empty() || s.top() != '[') {
// (1)
cout << 0;
return 0;
}
// (3)
if(input[i-1] == '[') {
mul /= 3;
s.pop();
ans += mul*3;
} else {
mul /= 3;
s.pop();
}
}
}
// (1)
if(s.empty()) cout << ans;
else cout << 0;
return 0;
}
/*
*/
'๐ Baaaaaarking > 0x08๊ฐ - ์คํ์ ํ์ฉ (์์์ ๊ดํธ์)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ S4][C++] 10799๋ฒ: ์ ๋ง๋๊ธฐ (0) | 2022.03.06 |
---|---|
[BOJ S4][C++] ๋ฐฑ์ค 9012๋ฒ: ๊ดํธ (0) | 2022.03.02 |
[BOJ S4][C++] 3986๋ฒ: ์ข์ ๋จ์ด (0) | 2022.03.01 |
[BOJ S4}[C++) 4949๋ฒ: ๊ท ํ์กํ ์ธ์ (0) | 2022.02.25 |