2-O 질문 있습니다
14
3 asked
강의 영상에서 닫힌 괄호가 들어왔을때 스택에 사이즈가 없으면 false를 무조건 반환하는 식으로 이해했습니다
하지만 예를 들어 이전에 ( 가 한번 들어왔고 다음 인덱스에 ]가 들어왔으면 닫힌 괄호가 선입 되었음에도 불구하고 다른 종류의 괄호 때문에 못거르는게 아닌가 생각이 들었습니다. 그래서 저는 소괄호와 대괄호의 현재 개수를 따로 저장하는 방식으로 작성했는데 이에 대해 큰돌님의 생각이 궁금해 글을 작성하게 되었습니다. 읽어주셔서 감사합니다.
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int n;
int open, closed;
#include <stack>
int small, big;
bool check_closed(string s){
small=0; big = 0;
stack<char> stk;
for(int i=0; i<s.size(); i++){
if(s[i] == '(') {stk.push(s[i]); small++;}
else if(s[i] == '[') {stk.push(s[i]); big++;}
else if(s[i] == ')'){
if(small <= 0) return false;
else {
if(stk.top() == '(') {stk.pop(); small--;}
}
}
else if(s[i] == ']'){
if(big <= 0) return false;
else {
if(stk.top() == '[') {stk.pop(); big--;}
}
}
}
return stk.empty();
}
int main(){
while(1){
string s;
getline(cin, s);
if(s == ".") break;
if(check_closed(s)) cout << "yes\n";
else cout << "no\n";
}
return 0;
}
Answer 2
1
안녕하세요 태욱님 ㅎㅎ
좋은 코드네요 ㅎㅎㅎ
다만 이 문제에서는 괄호의 개수보다 괄호가 열린 순서와 닫히는 순서가 더 중요합니다. 예를 들어 ([)] 와 같은 경우는 소괄호와 대괄호의 개수가 모두 맞지만, 닫히는 순서가 올바르지 않아 올바른 괄호 문자열이 아닙니다.
그래서 스택의 top을 확인하는 것만으로도 현재 닫으려는 괄호가 가장 최근에 열린 괄호와 짝이 맞는지 검증할 수 있습니다. 또한 스택의 크기 자체가 아직 닫히지 않은 괄호의 개수를 의미하기 때문에 소괄호와 대괄호의 개수를 별도로 저장하지 않아도 충분합니다.
물론 개수를 따로 관리하는 방식으로 접근해보신 것은 좋은 시도라고 생각합니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. 태욱님 질문에 대한 답변을 드리겠습니다.
태욱님께서 제안한 소괄호와 대괄호의 개수를 따로 관리하는 방식은 꽤 직관적이고, 중첩된 괄호의 경우를 더욱 명확하게 이해할 수 있도록 도와줍니다. 다만, 이러한 방법은 결과에 영향을 미치는 ‘(’, ‘)’ 쌍과 ‘[’, ‘]’ 쌍이 아예 맞지 않을 때 발생하는 예외적인 케이스를 다룰 때 좀 더 복잡할 수 있습니다.
일반적인 괄호 짝 검사에서는 스택을 사용하여 괄호가 열릴 때마다 스택에 푸시하고, 닫힐 때마다 해당하는 종류의 괄호가 스택의 최상단(top)에 있는지를 확인하고, 맞는 경우 스택에서 제거(pop)하는 방식으로 처리합니다. 닫히는 괄호가 나왔을 때, 스택이 비어있거나 맞지 않는 괄호일 경우 오류를 반환합니다.
다음은 비슷한 문제에 대해 도움을 받을 수 있는 자료들입니다.
2 - O 4949번 문제..: 이 링크에서는 스택을 이용하여 닫히는 괄호가 올 때 스택에서 올바르게 짝을 맞추는 방법에 대해 설명하고 있습니다.
큰돌님 조금 다르게 코드를 작성했는데 한번 봐주시면 감사하겠습니다!: 여기는 스택 이용 방식에 대해 다른 접근 방식을 설명하면서, 조건문을 활용한 예시를 제공합니다.
태욱님이 작성하신 방식도 문제가 없으며, 로직의 명확성을 유지하면서 코드를 작성했다는 점에서 장점이 있습니다. 코드가 스택의 사용보다는 카운터를 전환했기 때문에 특정 조건을 관리하기에 유리할 수 있습니다.
질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
3-A 문제 풀이 관련 질문
0
10
1
2-T 문제에 관한 질문
0
19
2
코딩 살구 클럽 접속 및 사용방법 문의
0
33
2
안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~
0
52
2
코딩살구클럽 로그인문제
0
50
3
코딩 살구 클럽 로그인 문제
0
63
2
2-J 채점관련 질문
0
55
3
코딩 살구 클럽 Python 지원 가능 여부
0
67
1
살구클럽 아이디 없음 문제
0
70
1
1-O 코딩살구클럽 채점관련 질문
0
53
2
히든 테스트 케이스가 사라졌습니다
0
52
1
채점서버 혹시 다른 언어 지원도 가능하게 해주실 수 있나요
1
69
2
살구 클럽 채점 관련 문의(테스트 케이스)
0
64
2
1-H 문제 채점하기 오류
0
57
3
코딩살구클럽 2주차 2-L 문제 채점하기 오류
0
50
2
살구 클럽 채점 관련 문의
0
61
2
코딩 살구 클럽 실전 세션
0
56
2
코딩살구클럽 채점 관련 질문
0
49
2
코딩살구클럽 컴파일에러
0
78
2
5-B
0
49
2
4 - A
0
57
2
코딩살구클럽 입장이 안됩니다
0
139
2
4-F 경우의 수 질문입니다.
0
57
2
코딩살구클럽 가입이 안됩니다.
0
124
2

