어흥

[백준 10799] 쇠막대기 (C++) 본문

알고리즘/백준

[백준 10799] 쇠막대기 (C++)

라이언납시오 2021. 1. 13. 14:30
728x90
반응형

문제링크: www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

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

www.acmicpc.net

1. 주의할 점

- 레이저가 쏘아질 때, 얼만큼 값이 추가되는지 확인한다

- 끝처리를 어떻게 할지 생각한다

 

2. 구현

- 레이저는 항상 () 형태로 입력되므로 '('다음에 ')'가 있으면 레이저, 없으면 쇠막대기의 연장선이라고 생각한다

- 쇠막대기면 Stack에 '('를 추가한다

- 레이저라면 Stack의 크기만큼 Result에 더한다(레이저를 기준으로 왼쪽 부분 추가)

- 쇠막대기가 끝났다면, Result++와 Stack에서 pop()을 수행한다

- 마지막이 쇠막대기로 끝났다면, 위의 연산에서 추가가 되지 않으므로(오른쪽 연산은 수행하지 않았으므로) Result에 Stack의 크기만큼 더한다

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

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	string str;
	cin >> str;
	stack<char> s;
	int result = 0;
	for (int i = 0; i < str.size(); i++) {
		char c = str[i];
		if (c == '(') {
			if (str[i + 1] == ')') {
				result += s.size();
				i++;
			}
			else
				s.push(c);
		}
		else {
			result++;
			s.pop();
		}
	}
	result += s.size();
	cout << result;
	return 0;
}
728x90
반응형
Comments