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

정Logan님의 프로필 이미지
정Logan

작성한 질문수

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

2-O

큰돌님 조금 다르게 코드를 작성했는데 한번 봐주시면 감사하겠습니다!

작성

·

246

1

#include<bits/stdc++.h>
using namespace std;
string a;
bool check(string s) {
    // (과 [를 담을 stack
    stack<char> cstk;

    //만약 ([이면 무조건 담고 그렇지 않은 경우들 체크 , 문자들이 들어가기 때문에 특정 조건에 맞는 선언으로 해야한다. else를 쓰지 않는 방향으로 
    for(char c : s ) {
        if( c == '(' || c == '[') cstk.push(c);
        // 현재 c가 ), ] 인데 stck이 비어있으면 return false;
        if( (c == ')' || c == ']') && cstk.empty()) return false;

        // 여기서 위의 조건의 else가 아닌 두가지 경우로 특정지었다. 
        if( c == ')'){
            if(cstk.top() == '(') cstk.pop();
            else return false;
        }

        if( c == ']') {
            if(cstk.top() == '[') cstk.pop();
            else return false;
        }
    }
    // 다 돌았는데 아무문제없이 cstk.empty면 
    return cstk.empty();
}

int main () {
    while(true) {
        // cin과 다른점은 띄어쓰기도 아스키코드로 받아주기 때문에 띄어쓰기가 포함된 문자열도 한번에 받을 수 있다.
        getline(cin,a);
        if( a == ".") break;
        if(check(a)) cout << "yes\n";
        else cout << "no\n";
    }
}

답변 1

1

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

굉장히 좋은데요?

잘짜셨어요 ㅎㅎ 주석 좀 달았습니다.

#include<bits/stdc++.h>
using namespace std;
string a;
bool check(string s) {
	//good
    stack<char> cstk;
	// good
    for(char c : s ) {
        if( c == '(' || c == '[') cstk.push(c);
        // 현재 c가 ), ] 인데 stck이 비어있으면 return false;
        if( (c == ')' || c == ']') && cstk.empty()) return false;

        // 여기서 위의 조건의 else가 아닌 두가지 경우로 특정지었다. 
        if( c == ')'){
            if(cstk.top() == '(') cstk.pop();
            else return false;
        }

        if( c == ']') {
            if(cstk.top() == '[') cstk.pop();
            else return false;
        }
    }
	//size보다 empty로 간단하게 == good
    return cstk.empty();
}

int main () {
    while(true) { 
		//good
        getline(cin,a);
        if( a == ".") break;
		// 모듈화 good
        if(check(a)) cout << "yes\n";
        else cout << "no\n";
    }
}
정Logan님의 프로필 이미지
정Logan
질문자

빠른 답변 감사합니다!

정Logan님의 프로필 이미지
정Logan

작성한 질문수

질문하기