DOTY

1) 백준 4949 - 균형잡힌 세상 본문

Algorithm/Data Structure

1) 백준 4949 - 균형잡힌 세상

증식세포 2023. 1. 13. 15:04
728x90
반응형

4949번: 균형잡힌 세상 (acmicpc.net)

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net


작은 실수 하나 때문에 고민한 문제

 

방법은 여는 괄호는 스택에 넣고 닫는 괄호는 스택 top과 비교하여 괄호가 일치하면 pop 다르면 break.

#include <bits/stdc++.h>

using namespace std;

int main(void) {
	stack<char> cover;
	
	while(1) {
		bool check = false;
		while(!cover.empty()) {
			cover.pop();
		}
		string str;
		getline(cin, str);
		if(str == ".") {
			break;
		}
		
		for(int i = 0; i < str.length(); i++) {
			if(str[i] == '(' || str[i] == '[') {
				cover.push(str[i]);
			}
			else if(str[i] == ')') {
				if(!cover.empty() && cover.top() == '(') {
					cover.pop();
				}
				else if(cover.empty() || cover.top() != '(') {
					check = true;
					break;
				}
			}
			else if(str[i] == ']') {
				if(!cover.empty() && cover.top() == '[') {
					cover.pop();
				}
				else if(cover.empty() || cover.top() != '[') {
					check = true;
					break;
				}
			}
			
		}
		if(cover.empty() && !check) {
			cout << "yes" << endl;
		}
		else {
			cout << "no" << endl;
		}
		
	}
	
	return 0;	
}

처음엔 while대신에 if를 쓰는 바보같은 짓을 했다.

 

두번짼 닫는 괄호가 없는 입력을 받았을 때 후처리를 안해줬다.

 

많이 어려운 문제는 아닌 것 처럼 보였는데....

다시 공부 시작하려니까 머리가 굳었나보다..ㅜ

728x90
반응형
Comments