BOJ 문제풀이

백준 9012번 c++ 풀이

koreasunoo 2021. 8. 7. 17:10

안녕하세요 오늘은 스택을 이용해서 간단하게 문제를 풀어보겠습니다.

 

전략:

1. 한 글자씩 비교할 것이므로 char타입을 stack을 선언해준다.

2. 만약 스택의 제일 위가 ')'이면 count++, s.pop()을 해주고, 그게 아니라면 count--, s.pop()을 해줌으로 count가 음수가 되면 실행이 끝내게 한다. 

3. 만약 (, )짝이 맞는다면 count는 결론적으로 0이 될 것이므로 만약 0이면 YES를 출력하고 그것이 아니면 NO를 출력한다.

 

코드:

#include <bits/stdc++.h>
using namespace std;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int T;
	cin>>T;
	for(int i= 0; i<T; i++){
		stack<char> s;
		string N;
		cin>>N;
		int len = N.length(),count = 0;
		for(int j= 0; j<len; j++){
			s.push(N[j]);
		}
		for(int j= 0; j<len; j++){
			if(s.top() == ')'){
				count++;
				s.pop();
			}
			else{
				count--;
				s.pop();
			}
			if(count<0){
				break;
			}
		}
		if(count==0){
			cout<<"YES"<<"\n";
		}
		else{
			cout<<"NO"<<"\n";
		}
	}
}

 

'BOJ 문제풀이' 카테고리의 다른 글

백준 1654번 c++ 풀이 (복습필요)  (0) 2021.08.10
백준 15829 c++ 풀이  (0) 2021.08.07
백준 11866번 c++ 풀이  (0) 2021.08.06
백준 9184번 c++ 풀이  (0) 2021.08.06
백준 10816번 c++ 풀이  (0) 2021.08.06