#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100000
char str[N];
int main(void) {
int count = 0, sum = 0;
scanf("%s", str);
for (int i = 0; i < strlen(str); i++) {
if (str[i] == '(') {
count++;
}
else if(str[i] == ')') {
count--;
if (str[i - 1] != str[i])
sum += count;
if (str[i] == str[i + 1])
sum += 1;
}
}
printf("%d", sum);
}
main함수 안에 있는 for문을 살펴보면 일단 열리는 괄호 ( 가 나오면 )도 존재하여 하나의 쌍이 완성되기 때문에 count를 1 올립니다. 그다음에 닫히는 괄호가 나오면 count를 1 낮춰줄 건데, 여기서 만약 직전의 괄호가 여는 괄호라면 자르는 포인트이기 때문에 그대로 count를 최종값인 sum에 모두 넣어줍니다.
그리고 비록 직전의 괄호가 여는 괄호더라도 바로 뒤의 괄호가 닫는 괄호이면 그대로 sum을 1 증가시켜줍니다. 이는 위 코드에서는 여닫는 대응 관계에 있는 괄호들을 매칭시켜 줄 수 없기 때문입니다. 그래서 매칭시킬 수 없는 대신 sum을 1 증가시켜서 마치 대응된 것처럼 처리해 주는 것입니다.
'코딩테스트 > baekjoon' 카테고리의 다른 글
[스택] 백준 2493번 (C언어) : 탑 (0) | 2023.05.19 |
---|---|
[스택] 백준 2504번 (파이썬) : 괄호의 값 (1) | 2023.05.19 |
[스택 & 큐] 백준 1935번 (C언어) - 후위 표기식2 (0) | 2023.05.09 |
[스택 & 큐] 백준 2164번 (C언어) - 카드2 (0) | 2023.05.09 |
[이분 탐색] 백준 2417번 (파이썬) : 정수 제곱근 (0) | 2023.04.07 |
댓글