[Codility] Lesson7. Stacks and Queues-Nesting C언어 풀이
1. 문제
(
, )
로 이루어진 문자열 S가 주어졌을 때, 나머지 없이 쌍을 이루는지 확인하는 문제
예제
'()()', '(())', '((()()))' - 참
'())', '(()', ')()(' - 거짓
2. 정답
첫번째 - 100점
$O(N)$
int solution(char *S) {
int top = -1;
for(int i = 0; i < strlen(S); i++){
if(S[i] == '(') top++;
else if(top == -1) return 0;
else top--;
}
return top == -1 ? 1 : 0;
}
(
을 스택에 입력 하였다. 이때 거짓이 되는 조건이 2가지가 있다.
스택에 자료가 없는데 )
가 입력될 경우
문자열이 끝났는데 스택에 자료가 남아 있을 경우