알고리즘 연습/백준
[C++][BOJ /9012/괄호] 여러 풀이 - 배열, 스택, int , scanf(%*d)
_h.j
2021. 2. 11. 12:28
728x90
더 쉽고 메모리, 시간 적게 사용되는 코드로 바꾸고 있다.
소스 코드 1 - 배열 활용
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int N;
string s;
cin >>N;
while(N--){
cin>>s;
int arr[2]={0,};
for(char c : s){
arr[int(c-'(')]++;
if(arr[0]<arr[1]) {
arr[1] = -1;
break;
}
}
(arr[0] != arr[1]) ? (cout<<"NO\n") : (cout<<"YES\n");
}
return 0;
}
소스 코드2 - 스택 활용
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int N;
string s;
cin >>N;
while(N--){
cin>>s;
stack<char> stack;
for(char c : s){
if(c == '(') stack.push('(');
else{ // )
if(stack.empty()){
stack.push('(');
break;
}
stack.pop();
}
}
(stack.empty() )?(cout<<"YES\n") : (cout<<"NO\n");
}
return 0;
}
소스 코드3 - int 변수 활용
//https://www.acmicpc.net/problem/9012
#include <bits/stdc++.h>
using namespace std;
int main(){
//ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int N;
string s;
cin >>N;
while(N--){
cin>>s;
int stack=0;
for(char c : s){
if(c == '(') stack++;
if( c==')') stack--;
if(stack < 0) break;
}
(stack==0 )?(cout<<"YES\n") : (cout<<"NO\n");
}
return 0;
}
배열, 스택 사용하는 것 보다 더 간단.
소스 코드4 - 숏코딩, scanf("%*d");
//https://www.acmicpc.net/problem/9012
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
char* p,s[51];
for( scanf("%*d") ; ~scanf("%s",s) ;){
for(p = s ,n=0 ; n>=0 && *p ; p++ ){
(*p == '(') ? (n++) : (n--);
}
printf( n ? "NO\n" : "YES\n" );
}
return 0;
}
이 코드 결과로 맞았습니다. 잘 나오지만
몇 개 입력할 건지 숫자를 입력하는 의미가 없어지고 계속 코드가 실행된달까...
아무튼 여러모로... 참고 정도만
scanf
%[*][폭(width)][한정자(modifiers)]타입(type)
scanf( " %*d " )
% 다음 *를 붙이면 입력되는 것 무시됨. 자세한 내용 아래 참고 페이지 다시 보기.
참고
728x90