※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5874번 문제인 소를 찾아라이다.

문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/5874 

 

5874번: 소를 찾아라

천방지축 베시(소, 1세)는 외양간을 탈출해서 풀로 뒤덮인 산등성이에 숨었다. 농부인 존씨는 베시를 다시 잡기위해 온 풀숲을 샅샅히 뒤졌지만 찾지 못하였다. 안타깝게도 그는 베시를 찾는

www.acmicpc.net

'('와 ')'로 이루어진 문자열에서 왼쪽에 "((", 오른쪽에 "))"이 있는 쌍을 몇 쌍 찾을 수 있는지 계산하는 문제이다.

 

문자열을 순서대로 둘러보면서 "))"가 나올 때마다 이전에 있던 "(("의 개수를 더해나가는 식으로 문제를 해결할 수 있다.

 

"(("의 개수를 매번 새로 세면 오래 걸리니, 이전까지 셌던 "(("의 개수를 계속 이용해 효율적으로 계수하자.

 

아래는 제출한 소스코드이다.

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

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	string s; cin >> s;
	int cnt = 0;
	int ans = 0;
	int slen = s.length() - 1;
	for (int i = 1; i < slen; i++) {
		if (s[i] == ')' && s[i + 1] == ')') ans += cnt;
		if (s[i] == '(' && s[i - 1] == '(') cnt++;
	}

	cout << ans;
}
728x90

+ Recent posts