• [4949] 백준 : 균형잡힌 세상(C++)

    2020. 4. 27.

    by. 데롱디롱

    728x90

     

    * 접근한 방법
    - getline으로 한 문장씩 받아와서 확인
    - ( , [ 가 들어오는경우 => push
    - ) , ] 가 들어오는 경우 => 앞에서 여는 기호가 나온 경우 pop, 아닌 경우 no출력

     

    #include <iostream>
    #include <string>
    #include <stack>
    using namespace std;
    
    int main() {
    	while (1)
    	{
    		string s;
    		getline(cin, s);
    
    		if (s.compare(".") == 0)
    			break;
    
    		stack<char> st;
    		int flag = 0;
    		for (int i = 0; i < s.size(); i++)
    		{
    			if (s[i] == '(' || s[i] == '[')
    				st.push(s[i]);
    			else if(s[i] == ')')
    			{
    				if (!st.empty() && st.top() == '(')
    					st.pop();
    				else
    				{
    					cout << "no\n";
    					flag = 1;
    					break;
    				}
    			}
    			else if (s[i] == ']')
    			{
    				if (!st.empty() && st.top() == '[')
    					st.pop();
    				else
    				{
    					cout << "no\n";
    					flag = 1;
    					break;
    				}
    			}
    		}
    		if(flag==0)
    			if (st.empty())
    				cout << "yes\n";
    			else
    				cout << "no\n";
    
    	}
    }

     

    * 생각하지 못한 점
    - 문장이 끝날 때 까지 no가 나오지 않은 경우, 마지막에 yes를 출력하는데 이렇게하면 no는 yes를 또 출력할 수도 있음
      => flag를 이용(no가 나온 경우, flag=1로 바꿔주고 flag가 0일때만 출력!)
    - [ab 와 같이 여는 기호만 나온 경우,  아무것도 출력하지 않았음
       => 마지막에 st이 비어있지 않으면 no를 한 번 더 출력!

    '알고리즘 풀이 > 백준' 카테고리의 다른 글

    [2164] 백준 : 카드2(C++)  (0) 2020.04.27
    [18258] 백준 : 큐2(C++)  (0) 2020.04.27
    [10773] 백준 : 제로(C++)  (0) 2020.04.27
    [11729] 하노이 탑 이동 순서(C++)  (0) 2020.04.27
    [2447] 백준 : 별 찍기 - 10(C++)  (0) 2020.04.26

    댓글