관리 메뉴

Mini

백준 10799 c++ // 스택응용 idea, 남은'('의 갯수를 활용하라 본문

Algorithm/스택

백준 10799 c++ // 스택응용 idea, 남은'('의 갯수를 활용하라

Mini_96 2023. 8. 23. 17:19

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

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

* 의사코드

#include<bits/stdc++.h>
using namespace std;

int n,ret;

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

	stack<char> s;
	string str;
	cin >> str;
	for (int i = 0; i < str.size();++i) {
		if (str[i] == '(') {
			s.push('(');
		}
		else {
			if (str[i - 1] == '(') {
				s.pop();
				ret += s.size();
                		//레이저를 맞은 막대갯수만큼 조각이 늘어난다.
			}
			else {
				s.pop();	
				//막대1개가 끗낫으므로
				//막대의수 == 남아있는'('수 감소
				ret++;
			}
		}
	}

	

	cout << ret;
}