알고리즘 모음(C++)

백준 4949 - 균형잡힌 세상(C++) 본문

백준

백준 4949 - 균형잡힌 세상(C++)

공대생의 잡다한 사전 2021. 11. 3. 17:04

문제 링크입니다. https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

Stack을 사용한 문제입니다.

문제 조건
출력 예시

괄호가 정확히 사용되었는지를 물어보는 문제였습니다.

 

Stack을 사용했습니다. '(' or '[' 과 같이 여는 괄호는 stack에 저장한 뒤, ')' or ']'와 같이 닫는 괄호가 입력되면 stack의 top을 확인해 쌍이 맞는지를 확인합니다.

쌍이 전부 맞았으며, stack에 남아있는 수가 없을 경우 yes를 출력하고 그 이외의 모든 경우는 no를 출력하면 됩니다.

 

문제 접근 방법

1. 문장을 입력 받는다.

2. 문장이 '.'로만 구성되 있으면 break 해준다.

3. 여는 괄호는 stack에 저장한다.

4. 닫는 괄호는 stack의 top과 비교한다.

 

 

자세한 것은 코드를 참고해 주세요

#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>
#include <stack>

using namespace std;



void solve() {
	while (1) {
		string sentence;
		stack<char> Find;
		bool flag = true;
		getline(cin, sentence);
		if (sentence[0] == '.') break;
		for (int i = 0; i < sentence.size(); i++) {
			if (sentence[i] == '(' || sentence[i] == '[') Find.push(sentence[i]);
			else if (sentence[i] == ')') {
				if (!Find.empty() && Find.top() == '(') Find.pop();
				else {
					cout << "no" << "\n";
					flag = false;
					break;
				}
			}
			else if (sentence[i] == ']') {
				if (!Find.empty() && Find.top() == '[') Find.pop();
				else {
					cout << "no" << "\n";
					flag = false;
					break;
				}
			}
		}
		if (flag) {
			if (!Find.empty()) cout << "no" << "\n";
			else cout << "yes" << "\n";
		}
	}
}

int main() {
	cin.tie(0);
	cout.tie(0);
	solve();
	return 0;
}

 

 

질문 및 조언 댓글 남겨주세요!

'백준' 카테고리의 다른 글

백준 18111 - 마인크래프트(C++)  (0) 2021.11.06
백준 1966 - 프린터 큐(C++)  (0) 2021.11.05
백준 1436 - 영화감독 숌(C++)  (0) 2021.11.03
백준 10866 - 덱(C++)  (0) 2021.11.03
백준 10816 - 숫자 카드2(C++)  (0) 2021.11.03