Algorithm

5432. 쇠막대기 자르기

이무쿤 2020. 4. 26. 10:36
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWVl47b6DGMDFAXm&categoryId=AWVl47b6DGMDFAXm&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

백준에서 풀었던 문제와 동일한 문제였는데 기억이 잘 안났다...

괄호가 닫힐 때 레이저면 자른 막대만큼 새로운 막대가 생기니까 스택 사이즈 만큼 더해주면 되고,

레이저가 아니면 잘린 후에 막대의 끝이니까 1개가 증가되면 된다..

 

레이저 인지 아닌지 구별은 str의 이전 값이 여는 괄호였는지 아닌지로 결정.

 

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

string str;

int main(int argc, char** argv)
{
	int test_case;
	int T;
	
	cin >> T;
	
	for (test_case = 1; test_case <= T; ++test_case)
	{

		cin >> str;

		stack<char> sta;
		int result = 0;

		for (int i = 0; i < str.size(); i++)
		{
			if (str[i] == '(')
			{
				sta.push('(');
			}
			else
			{
				if (str[i - 1] == '(')
				{
					sta.pop();
					result += sta.size();
				}
				else
				{
					sta.pop();
					result++;
				}
			}
		}

		cout << "#" << test_case << " " << result << endl;



	}
	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형