8번 문제   

 

 

 

    내가 풀이한 답   

 처음에는 ' ( ' 에 대한 변수, ' ( ' 에 대한 변수를 따로두어서 둘의 개수가 같지 않으면 NO라고 출력하면 된다고 생각해서 코드를 짰다. 

#include <stdio.h>
using namespace std;

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);
	char a[31];
	int i, left = 0, right= 0;
	scanf("%s", &a);
	
	for(i=0; a[i]!='\0'; i++){
		if(a[i] == '(') left++;
		if(a[i] == ')') right++;
	}
	//printf("left: %d, right:%d\n", left, right);
	if(left != right) printf("%s", "NO");
	else printf("%s\n", "YES");
	
	return 0;
}

 

 그 결과는 60점...

 

 다시 곰곰히 생각을 해보니 중간에 ' ( '로 시작해버리는 예 ( ( ) ( ) ) ) (  이것도 올바른 괄호가 아니기 때문에 코드의 수정이 필요했다. 2개의 변수를 합쳐서 ' ( '로 시작하는 것은 음수로 두고 음수이면 for문을 빠져나오도록 코드를 다시 짰다. 

 

#include <stdio.h>
using namespace std;

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);	
	char a[31];
	int i, cnt=0;
	scanf("%s", &a);
		
	for(i=0; a[i]!='\0'; i++){
		if(a[i] == '(') cnt++;
		else cnt--;
		if(cnt<0) break;
	}
	
	if(cnt == 0) printf("%s\n", "YES");
	else printf("%s\n", "NO");
	return 0;
}
	

 

 그 결과 통과를 했다.

 

 

    사이트의 답안   

#include<stdio.h>
using namespace std;
int main(){
	//freopen("input.txt", "rt", stdin);
	char a[100];
	int i, cnt=0;
	scanf("%s", &a);
	for(i=0; a[i]!='\0'; i++){
		if(a[i]=='(') cnt++;
		else if(a[i]==')') cnt--;
		if(cnt<0) break;
	}
	if(cnt==0) printf("YES\n");
	else printf("NO\n");
	return 0;
}

 

  사이트의 답안과 내 코드가 같은 논리로 짜여진 것을 확인했다.

'알고리즘 & 자료구조 > 기초 다잡기' 카테고리의 다른 글

10. 자릿수의 합  (0) 2020.09.03
9. 모두의 약수  (0) 2020.09.02
7. 영어단어 복구  (0) 2020.09.02
6. 숫자만 추출  (0) 2020.09.01
5. 나이 계산  (0) 2020.09.01