인프런 커뮤니티 질문&답변
4949번 제가 낸 답이 왜 틀렸는지 모르겠습니다.
해결된 질문
작성
·
210
1
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요. 항상 재밌는 풀이 감사드립니다.
제가 4949번을 풀었는데 도무지 저의 답에서 어떤 부분이 틀렸는지 모르겠습니다.
')'나 ']'이 들어올 때 '(', '['와 직접 비교하도록 해서 코드를 넣었는데도 "틀렸습니다"를 반환하더군요..
정말 궁금합니다. 알려주시면 감사하겠습니다.
#include <iostream>
#include <stack>
using namespace std;
int main() {
// ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
while(true)
{
string s;
getline(cin, s);
if(s == ".") break;
stack<int> _stack;
int flag = 0;
for(int i = 0; i < s.size(); i++) {
if(s[i] == '(' || s[i] == '[')
_stack.push(s[i]);
if(s[i] == ')' || s[i] == ']') {
if(_stack.size() == 0) {flag=1; break;}
else if(_stack.top() == '(' && s[i] == ')' || _stack.top() == '[' && s[i] == ']')
_stack.pop();
}
}
if(_stack.size() == 0 && flag == 0)
cout << "yes\n";
else
cout << "no\n";
}
return 0;
}
답변 1
0
큰돌
지식공유자
안녕하세요. yunbinni님ㅎㅎ
먼저 코드 대부분은 맞지만 몇가지 고쳐야 할 부분이 있습니다.
stack<int> _stack; >> 이것보다는 stk 등 다른 변수명을 선언하는게 좋습니다. 언더바를 써서 하는 것은 옛날 스타일
else if((_stack.top() == '(' && s[i] == ')')|| (_stack.top() == '[' && s[i] == ']'))
>> 틀린 부분은 아니나 항상 이렇게 많은 식을 && 나 || 을 걸 때 우선순위로 소괄호로 위 코드처럼 걸어두시는게 좋습니다.
>> 여기서 맞왜틀이 많이 나옵니다.
반례입니다.
이걸 해결하지 못하네요.
[)]
또 질문사항있으시면 언제든 말씀 부탁드립니다.
감사합니다.
강사 큰돌 올림.





