방금 전 푼 9012. 괄호
문제에서 나아가, 대괄호와 영어로 된 문장이 추가된 형태이다.
입력을 단순 cin >> string
으로 받는 게 아니라,
getline()
을 사용하는 게 포인트다.
cin
은 공백 문자를 만나면 입력을 받기를 멈추기 때문이다.
한 줄 쭉 입력받는 거 잊어먹어서 찾아보고, 아래 정리해뒀다.
getline()
으로 받은 문자열을 돌며 괄호나 대괄호를 만나면 벡터에 넣어줬다.
이후는 9012. 괄호
문제와 같은 방식으로 풀었다.
#include <cstring>
기본 사용법은 cin.getline(컨테이너, 사이즈 + 1, 구분자)
이다.
아래와 같이 사용한다면 \n
을 만나기 전까지 최대 100자를 받을 수 있다.
char c[101];
cin.getline(c, 101, "\n")
#include <string>
기본 사용법은 getline(cin, 컨테이너)
이다.
아래와 같이 사용한다면 \n
을 만나기 전까지 글자수 제한 없이 모두 받을 수 있다.
string s;
getline(cin, s)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<char> v;
void isBalanced() {
int idx = 0;
while (idx < v.size() - 1 && !v.empty()) {
if (v[idx] == '(' && v[idx + 1] == ')') {
v.erase(v.begin() + idx);
v.erase(v.begin() + idx);
idx = 0;
}
else if (v[idx] == '[' && v[idx + 1] == ']') {
v.erase(v.begin() + idx);
v.erase(v.begin() + idx);
idx = 0;
}
else idx++;
}
if (v.empty()) cout << "yes\n";
else cout << "no\n";
return;
}
int main() {
while (1) {
string str;
getline(cin, str);
if (str == ".") break;
v.clear();
for (int i = 0; i < str.length(); i++) {
if (str[i] == '(' || str[i] == ')' || str[i] == '[' || str[i] == ']') {
v.push_back(str[i]);
}
}
if (v.empty()) cout << "yes\n";
else isBalanced();
}
return 0;
}