반응형
이 문제는 Codility 사이트에서 확인하고 문제를 풀 수 있습니다.
문제.
설명
'(', '{', '[' 문자가 있는 문자열 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;
}
스택을 사용하면 쉽게 풀 수 있습니다. 왼쪽을 바라보는 문자를 스택에 넣고 반대 문자가 나오면 스택에서 꺼내 비교해 주면
깔끔하게 풀 수 있습니다.
반응형
'코딩테스트 > Codility' 카테고리의 다른 글
[C++ 풀이] Codility - Lessons 7, (Stacks and Queues) Nesting (0) | 2019.09.29 |
---|---|
[C++ 풀이] Codility - Lessons 7, (Stacks and Queues) Fish (0) | 2019.09.28 |
[C++ 풀이] Codility - Lessons 6, (Sorting) Triangle (0) | 2019.09.02 |
[C++ 풀이] Codility - Lessons 6, (Sorting) Distinct (0) | 2019.08.18 |
[C++ 풀이] Codility - Lessons 6, (Sorting) MaxProductOfThree (0) | 2019.08.09 |
댓글