728x90
https://www.acmicpc.net/problem/4949
문제 풀이
이전 문제와 비슷하다! 하나 차이가 있다면 변수 flag이다.
flag의 필요성은 이전 괄호 문제와 다르게 2개의 다른 괄호가 오기 때문이 필요한 것이다.
왜냐하면 스택이 비어있는데 닫는 괄호가 오거나 괄호의 짝이 맞지 않다면 절대 맞을 수 없기 때문이다.
느낀 점
코드 자체는 어렵지 않다고 느꼈다. 근데 채점을 하는 도중에
else flag = false; break; 로 제출했을 때 틀렸다고 나와 채점의 문제라고 생각했는데,
위의 코드는 else { flag = false; } break; 와 같은 코드라는 것을 어떤 유저분에게 배웠다!
코드
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
while (true) {
string str;
bool flag = true;
stack<char> s;
getline(cin, str);
if (str == ".") break;
for (int i = 0; i < str.length();i++) {
if (str[i] == '(' || str[i] == '[')
s.push(str[i]);
else if (str[i] == ']') {
if (!s.empty() && s.top() == '[')
s.pop();
else {
flag = false;
break;
}
}
else if (str[i] == ')') {
if (!s.empty() && s.top() == '(')
s.pop();
else {
flag = false;
break;
}
}
}
if (flag && s.empty()) cout << "yes" << "\n";
else cout << "no" << "\n";
}
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C++] 백준 17298번 : 오큰수 (0) | 2021.07.23 |
---|---|
[C++] 백준 1874번 : 스택 수열 (0) | 2021.07.23 |
[C++] 백준 9012번 : 괄호 (0) | 2021.07.21 |
[C++] 백준 10773번 : 제로 (0) | 2021.07.21 |
[C++] 백준 10828번 : 스택 (0) | 2021.07.21 |
댓글