Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그램으로 주어진 괄호를 활용해 균형 잡힌 괄호 표현식 출력하기

C 프로그래밍에서 미리 정의된 값을 가진 네 개의 변수 a, b, c, d가 주어지며, 어떤 변수가 사용되었는지에 따라 해당하는 괄호를 출력해야 합니다.

각 변수가 나타내는 괄호는 다음과 같습니다.

a → ((
b → ()
c → )(
d → ))

과제는 주어진 모든 괄호를 사용하여 균형 잡힌(balanced) 괄호 표현식을 만들어 출력하는 것입니다. 만약 균형 잡힌 표현식을 만들 수 없다면 -1을 출력합니다. 가능한 답이 여러 개일 경우에는 그중 아무거나 하나를 출력하면 됩니다.

예시

입력: a = 3, b = 2, c = 4, d = 3
출력: ((((((()()()()())))))()()

접근 방법

가장 먼저 주어진 개수의 괄호로 균형 잡힌 표현식을 만들 수 있는지 확인해야 합니다. 여는 괄호의 총 개수는 2×a + c개이고, 닫는 괄호의 총 개수는 c + 2×d개이므로 두 값이 같아야 균형이 맞습니다. 즉, a와 d가 같은 경우(단, a가 0이 아닐 때) 또는 a = c = d = 0인 경우(자체적으로 균형이 맞는 b의 "()"만 남는 경우)에만 표현식을 완성할 수 있습니다.

조건을 만족한다면 다음 순서대로 출력합니다.

  • 첫 번째 유형의 괄호 "((" 를 a번 출력
  • 세 번째 유형의 괄호 ")(" 를 c번 출력
  • 네 번째 유형의 괄호 "))" 를 d번 출력
  • 두 번째 유형의 괄호 "()" 를 b번 출력

이 순서대로 배치하면 앞부분에 여는 괄호가 충분히 나오고, 뒷부분의 닫는 괄호가 이를 모두 닫아주기 때문에 문자열 전체가 항상 균형을 이루게 됩니다.

알고리즘

START
Step 1 -> 함수 void print(int a, int b, int c, int d) 선언 및 int i 선언
    IF ((a == d && a) || (a == 0 && c == 0 && d == 0))
        i=1부터 i<=a까지 반복하며 "((" 출력
        i=1부터 i<=c까지 반복하며 ")(" 출력
        i=1부터 i<=d까지 반복하며 "))" 출력
        i=1부터 i<=b까지 반복하며 "()" 출력
    ELSE
        "can't be formed" 출력
Step 2 -> main()
    int a = 3, b = 2, c = 4, d = 3 선언
    print(a, b, c, d) 호출
STOP

C 구현 예제

#include<stdio.h>
void print(int a, int b, int c, int d){
    int i;
    if ((a == d && a) || (a == 0 && c == 0 && d == 0)){
        for (i = 1; i <= a; i++)
            printf("((");
        for (i = 1; i <= c; i++)
            printf(")(");
        for (i = 1; i <= d; i++)
            printf("))");
        for (i = 1; i <= b; i++)
            printf("()");
    }
    else
        printf("can't be formed");
}
int main(){
    int a = 3, b = 2, c = 4, d = 3;
    print(a, b, c, d);
    return 0;
}

출력 결과

위 프로그램을 실행하면 다음과 같은 결과가 생성됩니다.

(((((()()()()())))))()()