풀이
입력된 괄호이후 막대기의 개수를 top라고 하고, 다음과 같은 조건에 의해 result에 막대기의 개수를 더해주면 된다.
- ')'이전에 '('가 입력되었으면, 쇠막대기가 아니라 레이저이므로 --top한 값을 result에 더해준다.
- 쇠막대기를 의미하는 ')'만 입력 되었으면, 쇠막대기의 끝 부분에 도달한 것 이기 때문에 1개만 더하고, 현재 막대기의 개수를 1개 감소시킨다.
소스코드
#include <stdio.h>
#define MAX 100001
int main(){
char stack[MAX];
int top = 0, result = 0;
scanf("%s", stack);
for (int i = 0; stack[i] != '\0'; i++)
if (stack[i] == '(')
top++;
else{
if (i > 0 && stack[i-1] == '(')
result += --top;
else{
result++;
top--;
}
}
printf("%d\n", result);
}
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 10171] 고양이 [C] (0) | 2021.07.12 |
---|---|
[백준 10718] We love kriii [C] (0) | 2021.07.12 |
[백준 10798] 세로읽기 [C] (0) | 2021.07.11 |
[백준 10797] 10부제 [C] (0) | 2021.07.11 |
[백준 8958] OX퀴즈 [C] (0) | 2021.07.11 |