기타등등/알고리즘 기록

[C++]Stack 자료구조 - 올바른 괄호

CodeJB 2021. 7. 31. 18:47

#include <iostream>
#include <stack>

using namespace std;
int main() {
    int i,flag=1;
    stack<char> s;
    char a[50];
    
    scanf("%s",&a);
    
    for(i = 0; a[i] != '\0'; i++){
        if(a[i] == '(') s.push(a[i]);
        else {
            if(s.empty()) {
                printf("NO");
                flag = 0;
                break;
            }else s.pop();
        }
    }
    
    if(s.empty() && flag == 1) printf("YES");
    //위에서도 empty해서 NO찍고 또 YES찍을 우려가 있음.
    //그래서 위 상황과 아래 상황이 다르므로 flag로 구분함
    else if(!s.empty() && flag == 1) printf("NO");
    
    return 0;
}
  • ")"가 들어왔을 때  "()"가 만들어지는지를 확인해야한다.
  • 따라서 ")"가 들어왔다면, "("를 가리키고 있던 stack의 top포인터를 pop시켜준다.
  • 주의해야할 것은 ")"를 stack에 넣는 것이 아니다. for문을 통해 ")"가 발견됐다면 "("를 삭제시켜주는 것이다.
  • 마지막으로 저장된 자료를 계속 가리키고 있어야 하는 경우에 매우 유용하다.
https://www.inflearn.com/course/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/dashboard