https://www.acmicpc.net/problem/10799
문제 이해
문자열 파싱하는 문제이다. (와 )가 붙어있으면 레이저이고 아니면 막대기의 시작이거나 끝이다.
1. ( 과 )가 붙어있는 경우 -> 레이저
2. ( 다음에 )가 아니면 -> 막대의 시작
3. ) 인데 전이 (이 아니면 -> 막대의 끝
레이저일 때는 막대만큼 덩어리 추가,
막대의 시작이면 막대 개수 추가
막대의 끝이면 막대 개수 감소
이렇게 처리해서 막대 덩어리들의 수를 찾으면 된다.
작성 코드
#include <stdio.h>
char str[100000 + 10];
int main() {
int ans = 0;
int cnt = 0;
scanf("%s", str);//입력
for (int i = 0; str[i]; i++) {
if (str[i] == '(' && str[i + 1] != ')') {
// 레이저가 아님
cnt++;
}
else if (str[i] == '(' && str[i + 1] == ')') {
// 레이저임
ans += cnt;
i++;
}
if (str[i] == ')' && str[i - 1] != '(') {
//막대가 하나 끝남
ans += 1;
cnt--;
}
}
printf("%d\n", ans);//출력
return 0;
}
'컴퓨터기본 > 문제풀이' 카테고리의 다른 글
[백준] 2108: 통계학 (0) | 2021.09.06 |
---|---|
[정올] 1495 : 대각선 지그재그 (0) | 2021.09.03 |
[백준] 2567번: 색종이 - 2 (0) | 2021.09.03 |
[정올] 2008 : 할부 (0) | 2021.09.03 |
[정올] 2712 : 두 수의 최소합 (0) | 2021.09.03 |