https://www.acmicpc.net/problem/9012
처음 시도했을때는 숫자를 세어, 맞는지 틀린지 확인을 했는데,
괄호를 생각해보니깐
여는 괄호가 없는데 닫는 괄호가 나오면 안되는 것이였다.
그래서 다시 알고리즘 생각해보았다.
알고리즘
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 |