티스토리 뷰

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

 

10799번: 쇠막대기

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

www.acmicpc.net

 

Stack STL를 활용하여 풀었습니다. 길이를 활용하여 '(' 뒤에 바로 ')'가 나오면 stack의 사이즈를 체크하여 잘려진 만큼 더하였고, 그 이외의 경우에는 그냥 pop을 하여 막대기에서 제외하였습니다.

 

의사코드

더보기

if( c  ==  '(' ){

    푸쉬하여 넣고 갯수를 하나 늘린다. 그리고 (를 넣엇다는 것을 체크해준다.

}

else if ( c == ')' ){

    if( '('뒤에 바로 오는지 체크 ){

        레이저로 자르는 것이기 때문에 스택에서 하나 뺀 갯수를 total에 더해준다.

    }else{

        그냥 스택에서 하나 뺀다

    }

    ( 를 체크 해제한다.

}

 

#include<iostream>
#include<string>
#include<stack>

using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(nullptr);
	string s;
	stack<char> bal;
	int total = 0;
	int len = 0;
	getline(cin, s);
	for (auto c : s) {
		if (c == '(') {
			bal.push(c);
			total += 1;
			len = 0;
		}
		else if (c == ')') {
			if (len == 0) {
				bal.pop();
				total += bal.size();
				total -= 1;
			}
			else {
				bal.pop();
			}
			len = 1;
		}
	}
	cout << total << "\n";
}

'자료구조 및 알고리즘 > 문제풀이' 카테고리의 다른 글

백준 C++2164번) 카드2  (0) 2022.08.23
백준 C++ 2504번) 괄호의 값  (0) 2022.07.17
백준 C++ 4949번) 균형잡힌 세상  (0) 2022.07.17
백준 C++ 10845번) 큐  (0) 2022.07.17
백준 C++ 10828번) 스택  (0) 2022.07.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함