본문 바로가기
코드업(codeup)/C

[코드업(codeup)/C]코드업(codeup) 3129 : 올바른 괄호 2 C언어

by starfish22 2022. 1. 17.
728x90

▶문제 : 올바른 괄호 2 (codeup.kr)

 

올바른 괄호 2

'('와 ')'로 이루어진 50,000글자 이하의 괄호 문자열이 입력된다. 문자열 중간에 공백이나 다른 문자는 포함되지 않는다.

codeup.kr

 

▶코드 작성

#include <stdio.h>
#include <string.h>

char str[50001];

int main()
{
    scanf("%s", str);
    int leng = strlen(str);

    if (str[0] == ')' || str[leng - 1] == '(')
    {//앞 괄호가 닫히는 괄호거나 뒷 괄호가 열리는 괄호일 때
        printf("bad");
        return 1;
    }

    int cnt = 0;
    for (int i = 0; i < leng; i++)
    {
        if (str[i] == '(') cnt++;//열리는 괄호는 cnt++
        else cnt--;//닫히는 괄호면 cnt--
        if (cnt < 0 || cnt > 25000) break;//cnt가 0보다 작으면 닫히는 괄호가 더 많으므로 종료
    }//cnt가 25000보다 크면 열리는 괄호가 더 많으므로 종료

    if (cnt == 0) printf("good");
    else printf("bad");

    return 0;
}

 

▶해석

처음엔 getchar()로 문자를 입력받아서 바로 처리하다가 시간 초과가 되어 scanf로 문자를 입력받았다. 일단 맨 앞 괄호가 ')' 닫는 괄호 거나 맨 뒤 괄호가 '(' 여는 괄호인 문자는 bad 처리하였다. for문으로 문자를 하나씩 보면서 '(' 여는 괄호는 cnt++ 하고 ')' 닫는 괄호는 cnt-- 하였다. 여기서 cnt가 0보다 작으면 다는 괄호가 더 많다는 것이므로 break 하고 cnt가 최대 문자열 길이 50000의 반절인 25000보다 크면 여는 괄호가 한도를 넘어가는 것이므로 break를 하여 종료하였다.

728x90

댓글