#include <stdio.h>

// 입력: 배열 a - 길이를 구하고자 하는 문자열
// 출력: 문자열 a의 길이
int get_len(char a[100])
{
    // 널 문자가 있는 인덱스 구하기
    // (만약 a[i]쨰가 \0이란건 배열의 
    // 끝까지 왔다는 것이므로 i를 리턴한다.
    for (int i = 0; ; i++) if (a[i] == '\0') return i;
}

// 입력: 문자형 배열(문자열) x - 전체 문자열
//        정수형 변수 s - 문자열 x의 시작점
//        정수형 변수 e - 문자열 x의 끝점
//        문자형 배열(문자열) y - 부분 문자열
// 출력: 문자열 x[s...e]와 문자열 y가 같으면 1, 아니면 0 반환
int is_ok(char x[100], int s, int e, char y[100])
{
    // 배열 x의 길이(끝점 - 시작점 + 1)
    int n = e - s + 1; 

    // 배열 y의 길이
    int m = get_len(y); 

    // 만약 배열 x와 y의 길이가 같지 않다면 프로그램 끝내기
    if (n != m) return 0; 

    for (int i = s, j = 0; i <= e; i++, j++) 
        // 만약 배열 시작 부분부터 끝까지
        // 부분 문자열이 있지 않다면 프로그램 끝내기
        if (x[i] != y[j]) return 0;

    // 부분 문자열이 전체 문자열에 있다면
    // 프로그램 끝내기
    return 1;
}
int main()
{
    //s = 전체 문자열, t = 부분 문자열
    char s[100], t[100]; 
    // n = s 배열의 길이, m = t 배열의 길이
    int n, m; 

    scanf("%s", s);
    scanf("%s", t);

    // 배열 s와 t의 길이를 변수 n, m에 저장한다.
    n = get_len(s);
    m = get_len(t);

    // i는 시작점
    for (int i = 0; i < n; i++) 
    {
        //j는 끝점
        for (int j = i; j < n; j++)
        {
            // 만약 is_ok 함수에서
            // 부분 문자열이 전체 문자열에 표함되있다는 결과가 나왔다면.
            if (is_ok(s, i, j, t) == 1) 
            {
                // O를 출력한 후 프로그램을 끝낸다.
                printf("O");
                return 0;
            }
        }
    }
    // 확인을 했는데도 프로그램이 끝나지 않았다면 
    // 검색이 안되는 경우이므로 X를 출력한다.
    printf("X");
}

'SFPC > 2022' 카테고리의 다른 글

2022 SFPC pB0  (0) 2023.02.22
2022 SFPC pB1  (0) 2023.02.22
2022 SFPC pA0  (0) 2023.02.22
2022 SFPC E1  (0) 2023.02.21
2022 SFPC E0  (0) 2023.02.21
2022 SFPC D1  (0) 2023.02.19

+ Recent posts