https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

처음 시도했을때는 숫자를 세어, 맞는지 틀린지 확인을 했는데,

 

괄호를 생각해보니깐 

여는 괄호가 없는데 닫는 괄호가 나오면 안되는 것이였다. 

그래서 다시 알고리즘 생각해보았다. 

 

 

알고리즘

1. 괄호를 입력 받는다. 
2. 괄호의 수 만큼 반복문을 돌린다. (여기에서 top는 0보다 크거나 같아야함.)
    (top가 0보다 작다는 말은 닫는 괄호가 여는 괄호보다 먼저 나왔다는 말이기 때문에 반복문 종료)
   2-1) 만약 해당 문자가 '('라면 top++
   2-2) 만약 해당 문자가 ')'라면 top--
3. 만약 top가 0이라면 (제대로 된 것) YES출력
4. top가 0이 아니라면(여는 괄호가 많거나, 닫는 괄호가 많거나, 닫히지 않았는데 열렸거나, 열리지 않았는데 닫힌 경우) NO

 

 


 

#include <stdio.h>
#include <string.h>
int main() {

	int testcase;
	char input[51];
	int top = 0;
	scanf("%d", &testcase);
	while (testcase--) {
		top = 0;
		scanf("%s", &input);
		for (int i = 0;top >= 0 && i<strlen(input); i++) {
			if (input[i] == '(')
				top++;
			else if (input[i] == ')')
				top--;
		}
		if (top == 0)
			printf("YES\n");
		else 
			printf("NO\n");

	}
	return 0;
}

 

'Coding Test > Problem_solving' 카테고리의 다른 글

[백준] 10808 알파벳 개수  (0) 2021.03.09
[백준] 1874_스택 수열  (0) 2021.02.18
[백준]9093_단어 뒤집기  (0) 2021.02.18
[백준] 4948_베르트랑 공준  (0) 2021.02.14
[백준]1929_소수 구하기  (0) 2021.02.13

+ Recent posts