BOJ 문제풀이

백준 4949번 c++ 풀이

koreasunoo 2021. 8. 12. 10:58

안녕하세요 오늘은 stack을 이용하여 문제를 풀어보도록 하겠습니다.

 

전략: 

1. char 타입으로 stack을 선언해줍니다.

2. 모든 입력을 getline으로 받아서 한줄씩 받을 수 있도록 한다. 만약 들어온 입력이 "."이면 while문을 끝낸다.

3. 들어온 문자열의 길이만큼 반복하는 for문을 만들어서 각 문자가 '('인지, '['인지등등 판단한다.

4. 만약 (이거나 [이면 stack에 push해주고, 만약 )이면 stack이 비어있는지 확인하고, 또는 stack의 맨 위가 (이면 bool타입의 result에 false를 대입해주고, for문을 break 해준다. 그게 아니라면 result에 true를 대입하고 stack의 맨 위를 pop으로 없앤다. ]도 마찬가지로 처리해준다.

 

코드:

#include <bits/stdc++.h>
using namespace std;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	while(1){
		stack<char> st;
		string s;
		getline(cin, s);
		bool result = true;
		if(s =="."){
			break;
		}
		for(int i = 0; i<s.length(); i++){
			int x = s[i];
			if(x =='(' or x=='['){
				st.push(x);
			}
			else if(x==')'){
				if(st.empty()or st.top() != '('){
					result = false;
					break;
				}	
				else{
					result= true;
					st.pop();
				}
				continue;
			}
			else if(x==']'){
				if(st.empty() or st.top() != '['){
					result = false;
					break;
				}
				else{
					result = true;
					st.pop();
				}
			}
		}
		if(!st.empty() or !result){
			cout<<"no\n";
		}
		else{
			cout<<"yes\n";
		}
	}
}

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

백준 18111번 c++ 풀이  (0) 2021.08.14
백준 10773번 c++ 풀이  (0) 2021.08.13
백준 2805번 c++ 풀이  (0) 2021.08.11
백준 1874번 c++ 풀이  (0) 2021.08.11
백준 1654번 c++ 풀이 (복습필요)  (0) 2021.08.10