본문 바로가기

problem solving

4949번: 균형잡힌 세상

스택구조를 이용해 문제를 풀었다.

일반 문자는 무시하고 괄호가 나올 때마다 조건을 걸었는데,

순서대로 문자를 순회하다 닫히는 괄호가 나왔을 때 스택의 탑이 동일한 쌍{ ( (, ) ), ( [, ] ), ( {, } )}이 아니라면 no를 출력할 수 있도록 했다.

마지막까지 정상적으로 열고 닫는게 완료되면 yes가 출력된다.

#include <iostream>
#include <stack>
 
int main(void) {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    
    char str[110= { NULL };
    while (true) {
        std::cin.getline(str, 110'\n');
        if (str[0== '.') {
            break;
        }
        std::stack<char> mS;
        for(int i = 0; str[i] != '.'; i++) {
            if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
                mS.push(str[i]);
            }
            else if (mS.empty()) {
                if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
                    mS.push('X');
                    break;
                }
            }
            else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
                if ((mS.top() == '(' && str[i] == ')'||
                    (mS.top() == '[' && str[i] == ']'||
                    (mS.top() == '{' && str[i] == '}')) {
                    mS.pop();
                }
                else {
                    break;
                }
 
            }
        }
 
        if (mS.empty()) {
            std::cout << "yes" << "\n";
        }
        else {
            std::cout << "no" << "\n";
        }
    }
 
    return 0;
}
cs

'problem solving' 카테고리의 다른 글

7576번: 토마토  (0) 2020.03.03
6588번: 골드바흐의 추측  (0) 2020.03.03
3108번: 로고  (0) 2020.03.02
2667번: 단지번호붙이기  (0) 2020.03.02
[미해결]2632번: 피자판매  (0) 2020.03.01