- toc {:toc}
๋ฌธ์
์ธ๊ณ๋ ๊ท ํ์ด ์ ์กํ์์ด์ผ ํ๋ค. ์๊ณผ ์, ๋น๊ณผ ์ด๋ ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ ๊ดํธ์ ์ค๋ฅธ์ชฝ ๊ดํธ์ฒ๋ผ ๋ง์ด๋ค.
์ ๋ฏผ์ด์ ์๋ฌด๋ ์ด๋ค ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋, ๊ดํธ๋ค์ ๊ท ํ์ด ์ ๋ง์ถฐ์ ธ ์๋์ง ํ๋จํ๋ ํ๋ก๊ทธ๋จ์ ์ง๋ ๊ฒ์ด๋ค.
๋ฌธ์์ด์ ํฌํจ๋๋ ๊ดํธ๋ ์๊ดํธ(โ()โ) ์ ๋๊ดํธ(โ[]โ)๋ก 2์ข ๋ฅ์ด๊ณ , ๋ฌธ์์ด์ด ๊ท ํ์ ์ด๋ฃจ๋ ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- ๋ชจ๋ ์ผ์ชฝ ์๊ดํธ(โ(โ)๋ ์ค๋ฅธ์ชฝ ์๊ดํธ(โ)โ)์๋ง ์ง์ ์ด๋ค์ผ ํ๋ค.
- ๋ชจ๋ ์ผ์ชฝ ๋๊ดํธ(โ[โ)๋ ์ค๋ฅธ์ชฝ ๋๊ดํธ(โ]โ)์๋ง ์ง์ ์ด๋ค์ผ ํ๋ค.
- ๋ชจ๋ ์ค๋ฅธ์ชฝ ๊ดํธ๋ค์ ์์ ๊ณผ ์ง์ ์ด๋ฃฐ ์ ์๋ ์ผ์ชฝ ๊ดํธ๊ฐ ์กด์ฌํ๋ค.
- ๋ชจ๋ ๊ดํธ๋ค์ ์ง์ 1:1 ๋งค์นญ๋ง ๊ฐ๋ฅํ๋ค. ์ฆ, ๊ดํธ ํ๋๊ฐ ๋ ์ด์์ ๊ดํธ์ ์ง์ง์ด์ง์ง ์๋๋ค.
- ์ง์ ์ด๋ฃจ๋ ๋ ๊ดํธ๊ฐ ์์ ๋, ๊ทธ ์ฌ์ด์ ์๋ ๋ฌธ์์ด๋ ๊ท ํ์ด ์กํ์ผ ํ๋ค.
์ ๋ฏผ์ด๋ฅผ ๋์ ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋ ๊ท ํ์กํ ๋ฌธ์์ด์ธ์ง ์๋์ง๋ฅผ ํ๋จํด๋ณด์.
์ ๋ ฅ
ํ๋ ๋๋ ์ฌ๋ฌ์ค์ ๊ฑธ์ณ์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๊ฐ ๋ฌธ์์ด์ ์๋ฌธ ์ํ๋ฒณ, ๊ณต๋ฐฑ, ์๊ดํธ(โ( )โ) ๋๊ดํธ(โ[ ]โ)๋ฑ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ธธ์ด๋ 100๊ธ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ๊ฐ ์ค์ ๋ง์นจํ(โ.โ)๋ก ๋๋๋ค.
์ ๋ ฅ์ ์ข ๋ฃ์กฐ๊ฑด์ผ๋ก ๋งจ ๋ง์ง๋ง์ ์ ํ๋(โ.โ)๊ฐ ๋ค์ด์จ๋ค.
์ถ๋ ฅ
๊ฐ ์ค๋ง๋ค ํด๋น ๋ฌธ์์ด์ด ๊ท ํ์ ์ด๋ฃจ๊ณ ์์ผ๋ฉด โyesโ๋ฅผ, ์๋๋ฉด โnoโ๋ฅผ ์ถ๋ ฅํ๋ค.
์ถ์ฒ:https://www.acmicpc.net/problem/4949
ํ์ด
์์ ๊ดํธ ์์ผ๋ก ์์ด ๋ง๋ ๊ดํธ๋ ์คํ์์ ์ง์๋ฒ๋ฆฐ๋ค.
(์ [๋ ์คํ์ ๊ณ์ ์ ์ฅ
)์ ]๋ ์ง์ด ๋ง๋์ง ํ์ธ ๋๋ (, [๋ณด๋ค ๋จผ์ ๋์ค๋ฉด ์๋๋ค.
C++์์์ ์ ๋ ฅ
cin๊ณผ ๊ฐ์ ๊ฒฝ์ฐ string์ ์ ๋ ฅ์ ํ๋คํ๋๋ผ๋ ๊ฐํ๋ฌธ์(\nโฆ)๊ฐ ์๋ค๋ฉด ๊ทธ ์ด์ ๊น์ง๋ง ์ ๋ ฅ์ ๋ฐ๋๋ค.
๊ฐํ๋ฌธ์๋ฅผ ํฌํจํ ์ค ์ ์ฒด๋ฅผ ์ ๋ ฅ๋ฐ๊ธฐ ์ํด์๋ getlineํจ์๋ฅผ ์จ์ผ ํ๋ค.
(getline์ฐธ๊ณ : https://kyu9341.github.io/C-C/2020/01/17/C++getline()/)
๋ํ ์คํ์ด ๊ณ์ํด์ ์ด๊ธฐํ๋์ด์ผ ํ๊ธฐ์ ์คํ์ ์ธ์ด while์์ ์์ด์ผ ํจ์ ์ฃผ์ํ์
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
while(true){
bool isOK = true;
string str;
getline(cin, str);
if(str == ".") break;
stack<char> s; // ์คํ์ด while์์ ์์ด์ผ ์ด๊ธฐํ๋จ
for(auto c : str){
if(c == '(' || c == '['){
s.push(c);
}
else if(c == ')'){
if(s.empty() || s.top() != '('){
isOK = false;
break;
}
s.pop();
}
else if(c == ']'){
if(s.empty() || s.top() != '['){
isOK = false;
break;
}
s.pop();
}
}
if(s.empty() == false) isOK = false;
if(isOK) cout << "yes\n";
else cout << "no\n";
}
return 0;
}