반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 4949 균형잡힌 세상 본문

백준(Baekjoon) 문제

백준 4949 균형잡힌 세상

huiung 2019. 1. 19. 21:24
반응형

문제와 채점은 위 사이트에서 확인 하실 수 있습니다.

 

 

이 문제는 각각 대괄호'[]' 와 소괄호() 가 알맞게 짝지어 져있는지 확인 하는 문제였습니다.

 

따라서 '(' 이나 '[' 가 나오면 벡터에 push를 해주고 ')' 이나 ']' 가 나오는 순간 벡터의 back 부분에 그에 짝이 맞는 괄호가 있는지 확인 한 후 pop을 해주었습니다. 닫히는 괄호가 나오는 순간 그 이전에 열린괄호가 짝이 맞지 않다면 괄호가 균형잡히게 들어 있지 않은 것입니다.

 

저는 비어있는 조건 검사하기가 귀찮아서 초기에 'a'를 그냥 넣어주었습니다.

 

다음은 코드입니다.

 

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	string str1;
	vector<char> v;
	bool flag;

	while(1) {
		flag = true;
		getline(cin, str1);
		
		if(v.empty()) //비어 있으면 문자'a'삽입 
			v.push_back('a');
		
		if(str1.length() == 1 && str1[0] == '.') //.이 나오면 입력 종료 
			break;

		for(int i = 0; i < str1.length(); i++) {
			if(str1[i] == '(' || str1[i] == '[') //'('이나 '["가 나오면 push 
				v.push_back(str1[i]);
			
			if(str1[i] == ')') { //')가 나왔을때 '('가 있으면 pop 그렇지 않으면 break 
				if(v.back() == '(') 
					v.pop_back();
				else {
					flag = false;
					break;
				}
			}
			else if(str1[i] == ']') { //']'가 나왔을때 '['가 있으면 pop 그렇지 않으면 break 
				if(v.back() == '[') 
					v.pop_back();
				else {
					flag = false;
					break;
				}
			}					
		}
		
		if(flag && v.size() == 1) //flag가 true이고 벡터에 'a'말고 문자가 없다면 yes 
			cout<<"yes"<<'\n';
		else
			cout<<"no"<<'\n';
		
		v.clear();
	}
	return 0;

}
반응형

'백준(Baekjoon) 문제' 카테고리의 다른 글

백준 1181 단어 정렬  (0) 2019.01.20
백준 1026 보물  (0) 2019.01.19
백준 9935 문자열 폭발  (0) 2019.01.19
백준 5525 IOIOI  (0) 2019.01.17
백준 5598 카이사르 암호  (0) 2019.01.16