균형 잡힌 세계(30)

공유 소스 보기(acmicpc.net)

공유 소스 보기

www.acmicpc.net

아, 짜증나. . . 10분 만에 풀었는데 컴파일 할 때 자꾸 안 된다고 하셔서 부담이 컸어요. . . 문제를 찾는 데 40분. 먼저 제가 쓴 답변을 보겠습니다.

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

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	while(true){
		string s;
		getline(cin, s);
		stack<char> stk;
		bool check = true;
		if(s==".") break;
		for(int i = 0; i < s.size(); i++){
			if(s(i) == '(' || s(i) == '(')
				stk.push(s(i));
			if(s(i) == ')'){
				if(!stk.empty()){
					if(stk.top()=='(')
						stk.pop();
					else {
					check = false;
					break;
					}
				}
				else {
				check = false;
				break;
				}
			}
			if(s(i) == ')'){
				if(!stk.empty()){
					if(stk.top() == '(')
						stk.pop();
					else {
					check = false;
					break;
					}
				}
				else {
				check = false;
				break;
				}
			}
		}
		if(!stk.empty())
		check = false;
		if(check == true)
			cout << "yes\n";
		else if(check == false)
			cout << "no\n";
	}
	return 0;
}

그럼 이전에는 왜 틀렸을까? 마지막으로 for 문을 빠져나온 후 스택이 비어있는지 판단하는 if(!stk.empty()) 코드를 for 문에 넣으면 자꾸 실수를 하게 되는데… 하! ! ! ! ! !짜증난


문제 문제