인프런 - 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 |