인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-O

2-O 질문있습니다!

작성

·

179

0

#include <bits/stdc++.h> using namespace std; int main(){ string s; while(true){ getline(cin, s); if (s == ".") break; stack<char> stk = {}; for (char c : s) { if (c == ')' && stk.size() && stk.top() == '(') { stk.pop(); } else if (c == ']' && stk.size() && stk.top() == '[') { stk.pop(); } else if (c == '(' || c == '[') { stk.push(c); } else { continue; } } if (stk.empty()) { cout << "yes" << '\n'; } else { cout << "no" << '\n'; } } } 이 코드가 틀린 이유가 뭘까요..ㅠ 도저히 모르겠네요.

그리고, 정답 풀이에서 check bool 변수가 하는 역할이 무엇일까요? 제 코드와의 차이가 check 플래그 변수가 없다는 것이 가장 큰 차이인 거 같은데 왜인지 모르겠습니다..

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 은정님 ㅎㅎ

죄송하지만 코드 보기가 매우 어렵습니다 ㅠㅠ

0주차 : 질문하는 방법 참고해서 다시 질문 부탁드립니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

최은정 님의 질문에 대한 답변을 확인하기 위해 관련된 기존 답변을 찾아보았습니다. 답변은 해당 문제, 즉 백준 4949번 문제와 관련되어 있습니다. 이 문제는 문자열에서 괄호가 올바르게 닫히는지를 검사하는 문제입니다.

우선, 질문자님의 코드를 분석해보면, 올바르게 열리고 닫힌 괄호를 확인하고 이를 스택에서 제거하는 로직을 잘 구현하셨습니다. 그러나 코드에서 ‘)’ 또는 ‘]’ 괄호가 먼저 나왔을 때 스택이 비어 있지 않도록 하는 추가적인 체크가 필요합니다. 스택이 비어있을 때 ‘)’ 또는 ‘]’ 괄호를 처리하려고 하면, 런타임 에러가 발생할 수 있습니다.

check라는 bool 변수의 역할은 다음과 같습니다. 이 변수는 문자열을 검사하는 도중에 잘못된 경우가 발견됐는지 여부를 나타냅니다. 즉, 올바른 괄호 짝이 아닌 경우에 checkfalse로 설정하고, 반복문을 중단합니다. 마지막에 check 변수와 스택이 비었는지 여부를 검사하여 “yes” 또는 “no”를 출력하게 됩니다.

비슷한 상황에서 질문과 답변이 있었던 기록을 살펴보니, 스택의 .top() 메소드를 호출하기 전에 스택이 비어있는지 반드시 체크해야 하는 경우가 있었습니다. 아래는 유사한 경우에 대한 답변의 링크입니다:

이러한 정보를 바탕으로, 질문자님의 코드에서도 비슷한 체크를 수행하는 로직이 필요할 수 있습니다. 답변에서도 스택이 비어있을 때 .top()을 호출하거나 팝(pop)하는 것이 문제를 일으킬 수 있음을 지적하고 있으니, 이를 참고하시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기