[BOJ/C++] 10799 쇠막대

Hanbi·2023년 7월 5일
0

Problem Solving

목록 보기
76/108
post-thumbnail

문제

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

풀이

구현 문제! 코드 자체는 간단한데 아이디어가 안 떠올라서 블로그 참고했다.

')'가 입력되었을 때, 레이저와 막대인 두 가지 경우가 있다. ➡️ 앞이 '('라면 레이저고, 그게 아니라면 막대의 끝

  • '('가 들어오면 stack에 push한다.
  • ')'가 들어왔을 때, 레이저와 막대인 두 가지 경우가 있다.
    => 앞이 '('라면 레이저이고, 그게 아니라면 막대의 끝
  • 레이저일 때는, ( )에서 앞의 '('를 처음에 push 해줬기 때문에 이것을 pop 해준다.
    이후, 막대의 개수만큼 추가해준다. 막대의 개수 == 현재 stack size
  • 막대의 끝일 때는, 막대의 개수를 1개 감소(pop)한 후, 막대 한 개가 절단된 것과 같은 상황임으로 1을 추가한다.

코드

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

using namespace std;

int main() {
	string str;
	stack<char> s;
	int ans = 0;

	cin >> str;
	for (int i = 0; i < str.size(); i++) {
		if (str[i] == '(')
			s.push(str[i]);
		else {
			if (str[i - 1] == '(') { //레이저인 경우
				s.pop();
				ans += s.size();
			}
			else { //막대의 끝인 경우
				s.pop();
				ans++;
			}
		}
	}

	cout << ans;

	return 0;
}
profile
👩🏻‍💻

0개의 댓글