한줄 후기 : C로 풀 때 개고생한 걸 C++로 이렇게 푸네
https://www.acmicpc.net/problem/9012
먼저 C 코드
#include <stdio.h>
#include <string.h>
#define STACK_SIZE 50
char stack[STACK_SIZE];
int top = 0;
int push(char x);
int pop();
int empty();
int main() {
char str[50];
int n,i,k =0;
scanf("%d", &n);
while (n > 0) {
for (i = 0; i < 50; i++) str[i] = '\0';
k = 0;
top = 0;
scanf("%s", str);
for (i = 0; i < strlen(str); i++) {
if (str[i] == '(') push('(');
else if (str[i] == ')') {
if (empty()) {
k = 1;
break;
}
else pop();
}
}
n--;
if (empty() == 1 && k == 0) printf("YES\n");
else printf("NO\n");
}
return 0;
}
int push(char x) {
stack[++top] = x;
}
int pop() {
return stack[top--];
}
int empty() {
if (top == 0) return 1;
else return 0;
}
보다 싶이 스택에 푸시, 팝 함수를 다 손수 ^^
#include <iostream>
#include <stack>
#include <string>
using namespace std;
string VPS(string str);
int main(){
int T;
cin >> T;
while (T--){
string str;
cin >> str;
cout << VPS(str) << endl;
}
}
string VPS(string str){
stack<char> s;
for(int i = 0; i<str.length(); i++){
if(str[i]=='('){
s.push(str[i]);
}
else if(str[i]==')'){
if(s.empty()) return "NO";
else{
s.pop();
}
}
}
if(s.empty()) return "YES";
else return "NO";
}
C++은 스택에 push, pop 같은 거의 모든 라이브러리가 있어 그냥 호출만 하면 되더라 ^^
'DEV > PS' 카테고리의 다른 글
[1152] 단어의 개수, C++ (0) | 2019.07.22 |
---|---|
[5430] AC, C++ (0) | 2019.07.22 |
[1158] 조세퍼스 문제, C++ (0) | 2019.07.22 |
[1543] 문서 검색, C (0) | 2019.07.20 |
[1918] 후위 표기식, C (0) | 2019.07.20 |