-
[๋ฐฑ์ค(BOJ) 2504๋ฒ] ๊ดํธ์ ๊ฐ (C++)PS(Problem Solving)/C++ 2022. 1. 21. 22:20๋ฐ์ํ
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2504
๋ฌธ์ ์ ๋ณด
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ดํธ์ด์ ๋ํ๋ด๋ ๋ฌธ์์ด(์คํธ๋ง)์ด ์ฃผ์ด์ง๋ค. ๋จ ๊ทธ ๊ธธ์ด๋ 1 ์ด์, 30 ์ดํ์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ทธ ๊ดํธ์ด์ ๊ฐ์ ๋ํ๋ด๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ผ ์ ๋ ฅ์ด ์ฌ๋ฐ๋ฅด์ง ๋ชปํ ๊ดํธ์ด์ด๋ฉด ๋ฐ๋์ 0์ ์ถ๋ ฅํด์ผ ํ๋ค.
ํ์ด
์คํ์ ์ด์ฉํด์ ํ์ดํ ์ ์๋ค. ๊ต์ฅํ ๋ง์ ๊ณ ๋ฏผ์ ํด๋ด๋ ํด๊ฒฐํ๊ธฐ ํ๋ค์๋ค. ์ฌ๋ ๊ดํธ ์ค ์๊ดํธ๊ฐ ๋์ค๋ฉด 2๋ฅผ num์ ๊ณฑํ๊ณ ์คํ์ push ํ๊ณ , ๋๊ดํธ๋ 3์ num์ ๊ณฑํ๊ณ ์คํ์ push ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ซ๋ ๊ดํธ ์ค ์๊ดํธ๊ฐ ๋์์ ๋ ๊ดํธ ์์ด ์ฌ๋ฐ๋ฅด๋ค๋ฉด ๊ณฑํด์ค num ๊ฐ์ sum์ ๋ํ๋ค. ๊ทธ๋ฌ๋ฉด ์๊ดํธ ์ 1๊ฐ๋ฅผ ๊ณ์ฐํ ๊ฒ์ด๋ฏ๋ก ์คํ์์ popํด์ ์ ๊ฑฐํด์ค ํ ์๊ดํธ ์์ด ์ ๊ฑฐ๋์์ผ๋ฏ๋ก num์ 2๋ก ๋ค์ ๋๋ ์ค๋ค. ๋๊ดํธ๋ ๋๊ฐ์ด ์๊ฐํ๋ฉด ๋๋ค.
์์ค ์ฝ๋
#include <bits/stdc++.h> using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); string str; cin >> str; int sum = 0; // ๋์ ํด์ ๋ํด์ง๋ ๊ฐ int num = 1; // ๊ณฑํด์ง ๊ฐ stack<char> S; for (int i = 0; i < str.length(); i++) { if (str[i] == '(') { num *= 2; // ์๊ดํธ ๊ณฑํ๊ธฐ 2 S.push(str[i]); } else if (str[i] == '[') { num *= 3; // ๋๊ดํธ ๊ณฑํ๊ธฐ 3 S.push(str[i]); } else if (str[i] == ')') { if (S.empty() || S.top() != '(') { // ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ ์ sum = 0; break; } if (str[i - 1] == '(') { sum += num; // ์์๊ฐ ์ฌ๋ ๊ดํธ์๋ค๋ฉด sum์ ๊ฐ์ ๋ํ๋ค. } S.pop(); num /= 2; // ์๊ดํธ ์์ด ์ฌ๋ผ์ ธ์ 2๋ก ๋๋๋ค. } else { // str[i] == ']' if (S.empty() || S.top() != '[') { // ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ ์ sum = 0; break; } if (str[i - 1] == '[') { sum += num; // ์์๊ฐ ์ฌ๋ ๊ดํธ์๋ค๋ฉด sum์ ๊ฐ์ ๋ํ๋ค. } S.pop(); num /= 3; // ๋๊ดํธ ์์ด ์ฌ๋ผ์ ธ์ 3์ผ๋ก ๋๋๋ค. } } if (S.empty()) { cout << sum; } else { // ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ ์ cout << '0'; } return 0; }
๋ฐ์ํ