어흥

[CodeForces] Unusual Competitions (C++) 본문

알고리즘/코드포스

[CodeForces] Unusual Competitions (C++)

라이언납시오 2020. 3. 8. 12:35
728x90
반응형

문제 링크: https://codeforces.com/contest/1323/problem/C

 

Problem - C - Codeforces

 

codeforces.com

1. 구현

- 입력받은 문자열 중에서 '('의 개수와 ')'의 개수가 같지 않으면 -1 출력한다. -> 이걸 안해서 틀렸다. 다음부턴 조심하자

- 위에서 수한 개수가 같다면, '('와')'이 짝이 이뤄지지 않을 때 만큼 더한다. "))()(("같은 문자열도 처리가 되도록 변수를 2개 설정해서 구한다.

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int num, ans = -1;
	cin >> num;
	string str;
	cin >> str;
	int l = 0, r = 0, cnt = 0, result = 0;
	for (int i = 0; i < str.size(); i++) {
		if (str[i] == '(') l++;
		else r++;
	}
	
	if (num % 2 == 1 || l-r!=0) cout << -1;
	else {
		l = 0; r = 0;
		for (int i = 0; i < str.size(); i++) {
			char c = str[i];
			if (c == '(') {
				if (r == 0) {
					l++;
					cnt++;
				}
				else {
					r--;
					cnt++;
					if (r == 0) {
						result += cnt;
						cnt = 0;
					}
				}
			}
			else if (c == ')') {
				if (l == 0) {
					r++;
					cnt++;
				}
				else {
					l--;
					cnt++;
					if (l == 0) {
						cnt = 0;
						l = 0;
						r = 0;
					}
				}
			}
		}
		cout << result;
	}	
	return 0;
}
728x90
반응형
Comments