- 문제
- 입력
한 줄에 쇠막대기와 레이저의 배치를 나타내는 괄호 표현이 공백없이 주어진다. 괄호 문자의 개수는 최대 100,000이다.
- 출력
잘려진 조각의 총 개수를 나타내는 정수를 한 줄에 출력한다.
// Created by dongwan-kim on 2022/07/22.
#include<iostream>
#include<algorithm>
using namespace std;
string s;
int k, sum; //k는 막대의 갯수
int main() {
cin >> s;
for (int i = 0; s[i] != NULL; i++) {
if (s[i] == '(') {
if (s[i + 1] == ')') //쌍을 이루게 될 경우 ')'부분에서 처리해 줄 것이므로 continue
continue;
else //막대가 추가된 경우
k++;
} else if (s[i] == ')') {
if (s[i - 1] == '(') //쌍을 이루는 경우
sum += k;
else { //막대가 끝나는 경우
k--;
sum++;
}
}
}
cout << sum;
}
string s에 입력을 받고 for문을 반복하며 index로 접근하면서 '('일 때와 ')'일 때로 나누어 문제를 해결했다.
변수 k에 막대의 갯수를 저장해준 후, ( ) 로 쌍이 이루어 질 경우에 레이저가 발사되는 지점이므로 그때 추가되는 막대의 갯수 k를 sum에 더해주었다.
'('일 때 쌍을 이루지 않는 경우 k++하며 막대 갯수를 추가해 주었고
')'일 때 쌍을 이루지 않는 경우 k--하며 막대의 갯수를 감소시켜 주었고 끝부분이 더해지기 때문에 sum++을 해주었다.