4949 - 균형잡힌 세상

재찬·2023년 1월 28일
0

Algorithm

목록 보기
32/64

문제

코드

#include <bits/stdc++.h>
using namespace std;

stack<char> st;
string s;

bool check(string a){
	while(st.size()){
		st.pop();
	}
	for(char c : a){
		if(c == '(' || c==')' || c=='[' || c==']'){ 
			if(!st.empty() && c == ')' && st.top() == '(')  st.pop();
			else if(!st.empty() && c == ']' && st.top() == '[') st.pop();
			else st.push(c);
		}
	}
	if(st.empty()) return true;
	else return false;
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	while(1){
		getline(cin, s);
		if(s == ".")break;
		if(check(s)) cout << "yes\n";
		else cout << "no\n";
	}
}

풀이

띄어쓰기가 포함된 문자열을 받아야 하므로 getline을 받아준다.
'.'이면 break 해줘야한다. 이때 string 이므로 쌍 따옴표를 쓰지 않으면 오류가 났다.
main 함수 내에서 하나씩 조건 걸고 check 할 수도 있지만 깔끔하게 새로운 함수를 만들었다.
check 함수는 문자열이 괄호일때만 검사를 하는데 ')' ']'가 비어있지 않은 스택에서 짝을 지으면 pop 아니면 push해서 마지막에 비어있으면 true 아니면 false를 반환한다.
중요한건 stack을 청소해줘야 다음 문자열이 들어왔을때 오류가 안난다.
그래서 처음에 stack 청소를 하고 시작한다.

결과

후기

stack을 사용할 줄 안다면 어렵지 않은 문제였다.

0개의 댓글