본문 바로가기
코딩테스트/Codility

[C++ 풀이] Codility - Lessons 7, (Stacks and Queues) Brackets

by Hwan2 2019. 9. 22.
728x90
반응형

이 문제는 Codility 사이트에서 확인하고 문제를 풀 수 있습니다.

https://www.codility.com/

 

 

문제.

 

 

 

 

 

설명

 
'(', '{', '[' 문자가 있는 문자열 S에 대해 문자열이 서로 대칭이 되는지 않되는지를 구하는 문제입니다.
"{[()()]}" 는 서로 대칭임으로 1을 반환.
"([)()]" 는 서로 대칭이 아님으로 0을 반환.
 
즉, 0 or 1 을 반환하면 되는 문제입니다.
 
여기서 'S'문자열의 최대 길이는 200,000이고 문자열의 원소는 '(', ')', '{', '}', '[', ']' 만 들어 있습니다.
 
또한 빈 문자열이 들어오면 1을 반환해 주면 됩니다.
 
 
 
 
 
결과

#include <stack>

using namespace std;

int solution(string &S) {
    // write your code in C++14 (g++ 6.2.0)
    stack<char> st;
    
    if(S.size() % 2 == 1)
        return 0;
    
    if( S == "" || S.empty())
        return 1;
    
    
    for(int i = 0; i < S.size(); i++){
        if(S[i] == '(' || S[i] == '{' || S[i] == '[')
            st.push(S[i]);
        else{
            if(st.empty()) return 0;
            char c = st.top();
            st.pop();
            if(c == '(' && S[i] != ')')
                return 0;
            else if(c == '{' && S[i] != '}')
                return 0;
            else if(c == '[' && S[i] != ']')
                return 0;
        }
    }
    
    if(st.empty()) return 1;
    else return 0;
}

 

 

 

 

 

 

스택을 사용하면 쉽게 풀 수 있습니다. 왼쪽을 바라보는 문자를 스택에 넣고 반대 문자가 나오면 스택에서 꺼내 비교해 주면

깔끔하게 풀 수 있습니다.

반응형

댓글


스킨편집 -> html 편집에서