30
총점
3
질문 수
0
좋아요
15
조회수
스택 자료구조를 활용한 괄호 매칭 알고리즘의 핵심 로직을 정확히 구현하셨고, map을 사용해 괄호 쌍을 효율적으로 관리하는 아이디어가 좋습니다. 엣지 케이스 처리, 특히 빈 스택에서의 접근을 방지하는 예외 처리 로직을 보완하실 필요가 있습니다. 기본 알고리즘 구현 능력은 우수하시니, 다양한 예외 상황과 경계 조건을 미리 고려하는 방어적 프로그래밍 습관을 기르시면 좋겠습니다.
#include<bits/stdc++.h>
using namespace std;
int main() {
string s; cin >> s;
string t;
map<char,char> mp;
string z = "(){}[]";
for (int i=0; i<6; i+=2) {
mp[z[i+1]] = z[i];
}
for (auto x : s) {
if (x == '(' || x == '{' || x == '[') {
t += x;
}
else {
if (t.back() == mp[x]) t.pop_back();
else {
cout << "false" << endl;
return 0;
}
}
}
if (t.empty()) cout << "true" << endl;
else cout << "false" << endl;
}
스택을 문자열로 구현하여 괄호 매칭 문제를 정확하게 해결하신 점이 인상적입니다. 맵을 활용해 닫는 괄호와 여는 괄호의 대응 관계를 깔끔하게 처리하셨고, 전체적인 로직도 올바르게 구현되었습니다. 다만 한 가지 중요한 엣지 케이스가 있는데, 스택이 비어있을 때 `t.back()`을 호출하면 런타임 에러가 발생할 수 있습니다. 닫는 괄호를 처리하기 전에 `t.empty()` 체크를 추가하시면 더욱 안전한 코드가 될 것입니다. 또한 실제 함수로 구현하여 반환값을 boolean으로 처리하면 문제 요구사항에 더 부합할 것 같습니다.
t could be empty(). i should've handle the exception case.
#include<bits/stdc++.h>
using namespace std;
int main() {
string s; cin >> s;
string t;
map<char,char> mp;
string z = "(){}[]";
for (int i=0; i<6; i+=2) {
mp[z[i+1]] = z[i];
}
for (auto x : s) {
if (x == '(' || x == '{' || x == '[') {
t += x;
}
else {
if (t.back() == mp[x]) t.pop_back();
else {
cout << "false" << endl;
return 0;
}
}
}
if (t.empty()) cout << "true" << endl;
else cout << "false" << endl;
}
문제점을 정확히 파악하셨지만 코드에서는 아직 해결되지 않았습니다. 여전히 `t.back()`을 호출하기 전에 `t.empty()` 체크가 없어서 빈 스택에서 닫는 괄호가 나올 때 런타임 에러가 발생할 수 있습니다. 올바른 해결책은 `else` 블록을 `else if (!t.empty() && t.back() == mp[x])` 형태로 수정하고, 그렇지 않은 경우 false를 반환하는 것입니다. 전체적인 스택 기반 접근법과 매핑 테이블 사용은 매우 적절하며, 이 작은 수정만으로 완벽한 솔루션이 될 것입니다.
몰라여
스택을 이용한 괄호 매칭의 핵심 아이디어는 정확히 이해하고 계시고, map을 활용해 닫는 괄호와 여는 괄호를 매핑하는 방식도 깔끔합니다. 하지만 현재 코드에서는 스택(문자열 t)이 비어있을 때 `t.back()`을 호출하면 런타임 에러가 발생합니다. 이를 해결하려면 닫는 괄호를 만났을 때 `if (!t.empty() && t.back() == mp[x])` 처럼 스택이 비어있지 않은지 먼저 확인해야 합니다. 스택이 비어있다면 바로 false를 반환하면 됩니다. 알고리즘의 기본 구조는 훌륭하니 예외 상황 처리만 보완하시면 완벽한 해답이 될 것입니다.
• 이 결과는 AI가 분석한 내용이며, 학습 목적으로 커뮤니티에 공유됩니다.
• 좋아요를 눌러 유용한 답변에 반응을 남겨보세요.
• 개인정보는 포함되지 않으며, 면접 연습 개선을 위한 참고 자료로 활용됩니다.