#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 = 0;
    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];
    }
    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[10000]={0};
    for(int i=0;i<signals_rows;i++){
        for(int j=1;j<list[i].data+1;j++){
            history[list[i].start+j]++;
            if(history[list[i].start+j]==2) return list[i].start+j;
        }
    }
    for(int k=1;k<100;k++){
        for(int i=0;i<signals_rows;i++){
            for(int j=1;j<list[i].data+1;j++){
                history[k*list[i].add+j+list[i].start]++;
                if(history[k*list[i].add+j+list[i].start]==2) return k*list[i].add+j+list[i].start;
            }
        }
    }
    for(int i=0;i<100; i++){
        printf("\n%d\t%d", i,history[i]);
    }
    return answer;
}

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

Embed on website

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