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 |