#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

struct com{
    int start;
    int data;
    int add;
};
typedef struct com com;

int ch(com* list1, com* list2){
    if((*list1).start<(*list2).start+(*list2).data && (*list1).start+(*list1).data>(*list2).start) return 1;
    return 0;
}

// signals_rows는 2차원 배열 signals의 행 길이, signals_cols는 2차원 배열 signals의 열 길이입니다.
int solution(int signals[5][3], size_t signals_rows, size_t signals_cols) {
    int answer = 1;
    com list[5];
    for(int i=0;i<signals_rows;i++){
        list[i].start=signals[i][0];
        list[i].add=signals[i][0]+signals[i][1]+signals[i][2];
        list[i].data=signals[i][1];
        answer *= list[i].add;
    }
    for(int i=0;i<signals_rows;i++){
        for(int j=0;j<signals_rows;j++){
            if(!ch(&list[i],&list[j]) && list[i].add==list[j].add) return -1;
        }
    }
    int history[5][20]={0};
    int i, j=0;
    for(i=0;i<signals_rows;i++){
        for(j=0;j<20;j++){
            if(signals[i][0]>=j+1) history[i][j]=0;
            else if(signals[i][0]+signals[i][1]>=j+1) history[i][j]=1;
            else if(signals[i][0]+signals[i][1]+signals[i][2]>=j+1) history[i][j]=0;
            else history[i][j]=-1;
        }
    }
    int sum=0, k[5]={0}, count=0;
    while(sum!=signals_rows && count<answer){
        sum=0;
        for(i=0;i<signals_rows;i++){
            sum+=history[i][k[i]];
            if(history[i][++k[i]]==-1) k[i]=0;
        }
        printf("%d\n", count);
        count++;
    }
    printf("%d\n", answer);
    if(count>=answer) return -1;
    return count;
}

int main(){
    int a[5][3]={{3,3,3},{5,4,2},{2,1,2}};
    printf("\n%d",solution(a, 3, 3));
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: