<aside>

#include <stdio.h>
#include <string.h>
#include <stdlib.h>  // malloc 사용을 위한 헤더 추가

//------------------- Naive ------------------//
#define MAX(a, b) ((a) > (b) ? (a) : (b))

void naivematch(char T[], int n, char P[], int m, int output[]) {
    int i, j, k, kk;

    for (i = 0; i < n; i++) {
        output[i] = 0;
    }

    for (i = 0; i < n; i++) {
        for (j = i, k = 0; k < m && j < n; j++, k++) {
            if (T[j] != P[k])
                break;
        }

        for (j = i, kk = 0; kk < k; j++, kk++) {
            output[j] = MAX(output[j], kk + 1);
        }
    }
}

int main() {
    char text[] = "abcabcabc";
    char pattern[] = "abcd";
    int n = strlen(text);
    int m = strlen(pattern);

    // 동적 할당
    int* output = (int*)malloc(n * sizeof(int));

		//text, text길이, 찾을 txt 문자 길이, 찾을 pattern 문자 길이
    naivematch(text, n, pattern, m, output);

    printf("Output array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", output[i]);
    }
    printf("\\n");

    free(output);  // 동적 할당 해제

    return 0;
}
//--------------------------------------------//

</aside>

구조


    for (i = 0; i < n; i++) {
        for (j = i, k = 0; k < m && j < n; j++, k++) {
            if (T[j] != P[k])
                break;
        }

        for (j = i, kk = 0; kk < k; j++, kk++) {
            output[j] = MAX(output[j], kk + 1);
        }
    }

1. 첫 번째 for문
-------------------
	 T = "abcabcabc"
   P = "abc"
-----------------------------------------------
j	k	T[j]	P[k]	if (T[j] != P[k])
0	0	'a'	'a'	❌ (같음 → 계속)
1	1	'b'	'b'	❌ (같음 → 계속)
2	2	'c'	'c'	❌ (같음 → 계속)
3	3	'a'	 X	✅ (P에 더 비교할 글자 없음 → break;)
-----------------------------------------------

2. 두 번째 for문
-------------------
output[0] = MAX(output[0], 1)
output[1] = MAX(output[1], 2)
output[2] = MAX(output[2], 3)
-----------------------------
=> output = [1, 2, 3, 0, 0, 0, 0, 0, 0]

3. i = 1, i = 2
---------
b != a 
c != a
---------
=> braek

4. i = 3
---------
j	k	T[j]	P[k]	if (T[j] != P[k])
3	0	'a'	'a'	❌ (같음 → 계속)
4	1	'b'	'b'	❌ (같음 → 계속)
5	2	'c'	'c'	❌ (같음 → 계속)
6	3	'a'	 X	✅ (P에 더 비교할 글자 없음 → break;)
----------------------------------------------
=> 5번 부터 2번과 동일