❔문제
🔄 문제 및 입출력 조건 파악
- 100글자보다 짧은 문장 입력
- 문장 입력 : `getline(cin, str)`
- 온점 "." 하나 입력될 때까지 입력 반복
- 균형 문자열이면 "yes", 아니면 "no"
✏️ 문제풀이
9012 :: 괄호 문제의 진화버전입니다.
역시 괄호 / 짝 찾기 문제이므로 스택을 사용한다는 것을 떠올려야합니다.
소괄호는 소괄호끼리, 대괄호는 대괄호끼리 짝지어집니다.
- 스택이 비어있거나, 여는 괄호 (`(` 또는 `[`)를 만났다면 스택에 `push()`하며 나아갑니다.
- 닫는 괄호(`)` 또는 `]`)를 만났다면, 스택 가장 위에 있는 것과 짝을 이루는지 확인합니다.
- 짝을 이루지 않는다면 더 볼 것도 없습니다. 해당 문장은 균형 문자열이 아닙니다.
📝 코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
string str;
while (getline(cin, str) && str != "."s) {
stack<char> stk;
for (char ch : str) {
if (ch == '(' || ch == ')' || ch == '[' || ch == ']') {
if (stk.empty() || ch == '(' || ch == '[') stk.push(ch);
else if (ch == ')' && stk.top() == '(') stk.pop();
else if (ch == ']' && stk.top() == '[') stk.pop();
else break; // 이게 없으면 top과 닫는괄호가 짝이 안맞을 때 ('[)') 닫는괄호를 무시하게 된다.
}
}
cout << (stk.empty() ? "yes\n" : "no\n");
}
}
🕧 결과
'Problem Solving' 카테고리의 다른 글
알고리즘 :: 백준 :: 2636 - 치즈 (0) | 2025.01.08 |
---|---|
알고리즘 :: 백준 :: 14502 - 연구소 (0) | 2025.01.08 |
알고리즘 :: 백준 :: 9012 - 괄호 (0) | 2025.01.08 |
알고리즘 :: 백준 :: 1436 - 영화감독 숌 (0) | 2025.01.08 |
알고리즘 :: 백준 :: 2852 - NBA 농구 (1) | 2025.01.08 |