hyunjin

[C++][BOJ /9012/괄호] 여러 풀이 - 배열, 스택, int , scanf(%*d) 본문

알고리즘 연습/백준

[C++][BOJ /9012/괄호] 여러 풀이 - 배열, 스택, int , scanf(%*d)

_h.j 2021. 2. 11. 12:28
728x90

백준 9012 바로가기

 

더 쉽고 메모리, 시간 적게 사용되는 코드로 바꾸고 있다.

소스 코드 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 " )

% 다음 *를 붙이면 입력되는 것 무시됨. 자세한 내용 아래 참고 페이지 다시 보기.

 

 

 

참고

백준 숏코딩

scanf 참고 1

c++ scanf

 

 

728x90