Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준 #다익스트라 #dijkstra #9370 #c++
- 1174
- backtracking #codetree #디버깅 #삼성코테
- C++
- 쌤쌤쌤
- c++ #boj #
- boj #백준
- 최소 #공배수 #최대 #공약수 #유클리드 #호제법 #lcm #gcd #c++ #boj #3343 #백준 #장미
- 투포인터 #백준 #boj #20922 #22862
- 호반우 상인
- 20117
- BOJ
- 줄어드는수
- 사이클 없는 그래프
- c++ #입출력 #속도 #ios #sync_with_stdio #cin #cout #tie
- 30870
- 3D #Reconstruction #computer #vision #volume #metric #tsdf #kinect #fusion
- 16202
- N번째큰수
- 코딩
- graph
- 진법변환 #2to10 #10to2 #이진법 #십진법 #변환 #bitset #c++
- 22869
- hcpc
- 이분탐색 #dp #11053
- 백준
- LIS #가장긴증가하는부분수열 #
- 레드아보
- 3343
- graph #최단경로
Archives
- Today
- Total
hyunjin
[C++][BOJ /9012/괄호] 여러 풀이 - 배열, 스택, int , scanf(%*d) 본문
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