티스토리 뷰

알고리즘

54. 올바른 괄호[stack 활용]

홍복치 2021. 1. 4. 22:07

인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.

문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅

 

 

입력예제 1

(()(()))(()

 

출력예제 1

NO

 

풀이 

- 여는괄호, 닫는괄호 짝 안맞으면 NO, 맞아서 다 없어지면 YES

- for문은 문자열의 마지막인 '\0'이 아닐때까지

- '('이면 스택에 넣는다,  ')'이면  스택이 비어있지 않을시 뺀다

-  닫는 괄호인데 스택이 비어있으면 NO출력해야 하기 때문에 flag 변수를 두어 값을 0으로 변경한다.

- flag=1인상태로 스택에 아무것도 남지 않으면 올바른 괄호이며 나머지는 다 올바른 괄호가 아니다.

 

#include <stdio.h>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
//54. 올바른 괄호

int main(){
    int i;
    int flag=1;
    stack<char> s;
    char str[50];
    scanf("%s", str);
    
    for(i=0;str[i]!='\0';i++){
        if(str[i]=='('){ s.push(str[i]); }
        else{
            if(s.empty()){
                flag=0;
                break;
            }
            s.pop();
        }
    }
    if(flag && s.empty()) printf("YES\n");
    else printf("NO\n");
    return 0;
}

 

'알고리즘' 카테고리의 다른 글

56. 재귀함수 분석[stack 활용]  (0) 2021.01.06
55. 기차운행[stack 활용]  (0) 2021.01.05
53. K진수  (0) 2020.12.31
52. Ugly numbers  (0) 2020.12.30
50. 영지(DP)  (0) 2020.12.29
최근에 올라온 글
Total
Today
Yesterday