https://www.acmicpc.net/problem/10799
괄호가 닫히는게 막대기의 끝인지 레이저인지 잘 구분해야 한다.
'('일 땐 계속 스택에 집어넣는다. ')'일 땐 무조건 pop을 한다.
레이저일 땐, 여태까지 스택에 넣었던 개수 즉, 나열된 막대기의 개수를 더한다.
막대기의 끝에선 항상 막대기 조각 하나만 남기 때문에 그것의 개수(1)을 더한다.
#include <stdio.h>
#include <string.h>
int idx;
int main()
{
int result = 0;
char st[100000];
scanf("%s", st);
for (int i = 0; i < strlen(st); ++i)
{
if (st[i] == '(')
{
idx++;
}
else if (st[i] == ')' && st[i - 1] == '(')
{
idx--;
result += idx;
}
else if (st[i] == ')')
{
idx--;
result++;
}
}
printf("%d\n", result);
return 0;
}
'온라인저지' 카테고리의 다른 글
[BOJ] 10539번: 수빈이와 수열 (0) | 2018.07.26 |
---|---|
[BOJ] 2075번: N번째 큰 수 (0) | 2018.07.26 |
[BOJ] 1159번: 농구 경기 (0) | 2018.07.26 |
[BOJ] 9012번: 괄호 (0) | 2018.07.26 |
[BOJ] 10845번: 큐 (0) | 2018.07.26 |
[BOJ] 10828번: 스택 (0) | 2018.07.26 |
댓글