Menu
Coddy logo textTech

복습: 단어 빈도수 카운터

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 63번째.

challenge icon

챌린지

쉬움

텍스트 입력을 분석하기 위해 단어 빈도수 카운터를 구현하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 다음과 같은 기능을 가진 countWordOccurrences 함수를 작성합니다:
    • 두 개의 char* 매개변수 sentencetargetWord를 받습니다.
    • 문장에서 대상 단어가 나타나는 횟수를 나타내는 정수를 반환합니다.
    • 루프를 사용하여 문장을 문자 단위로 처리합니다.
    • 공백을 구분자로 사용하여 단어 경계를 식별합니다.
    • 문장에서 각 단어를 추출하고 strcmp()를 사용하여 대상 단어와 비교합니다.
    • 정확히 일치하는 항목을 계산합니다 (대소문자 구분 비교).
  2. 다음과 같은 기능을 가진 extractWord 함수를 작성합니다:
    • char* sentence, 정수 startIndex, 그리고 char* word 매개변수를 받습니다.
    • 추출된 단어 뒤의 인덱스를 나타내는 정수를 반환합니다.
    • startIndex부터 시작하여 공백이나 널 종료 문자(null terminator)를 만날 때까지 단일 단어를 추출합니다.
    • 추출된 단어를 word 매개변수에 저장합니다.
    • 추출된 단어를 완성하기 위해 널 종료 문자를 추가합니다.
  3. 다음과 같은 기능을 가진 analyzeText 함수를 작성합니다:
    • char* sentence 매개변수를 받습니다.
    • 문장의 총 단어 수를 나타내는 정수를 반환합니다.
    • 공백을 구분자로 식별하여 단어 수를 셉니다.
    • 여러 개의 연속된 공백을 올바르게 처리합니다 (단일 구분자로 취급).
  4. main 함수에서:
    • 크기가 200인 문자 배열 inputSentence를 선언합니다.
    • 크기가 50인 문자 배열 searchWord를 선언합니다.
    • 입력으로부터 문장을 읽습니다 (공백으로 구분된 여러 단어가 포함될 수 있음).
    • 검색할 대상 단어를 읽습니다.
    • analyzeText 함수를 호출하고 총 단어 수를 다음 형식으로 출력합니다: Total words: [count]
    • countWordOccurrences 함수를 호출하고 결과를 다음 형식으로 출력합니다: Occurrences of '[searchWord]': [count]
    • 단어 빈도를 백분율로 계산하여 소수점 첫째 자리까지 다음 형식으로 출력합니다: Frequency: [percentage]%
    • 빈도 카테고리를 결정하고 출력합니다:
      • 빈도가 0.0%인 경우: Category: Not found를 출력합니다.
      • 빈도가 0.0%보다 크고 20.0%보다 작은 경우: Category: Rare를 출력합니다.
      • 빈도가 20.0%에서 50.0% 사이(포함)인 경우: Category: Common을 출력합니다.
      • 빈도가 50.0%보다 큰 경우: Category: Frequent를 출력합니다.

이 챌린지는 문자열 조작, 토큰화 및 텍스트 처리 능력을 테스트합니다. 문장을 개별 단어로 분리하고, 문자열이 정확히 일치하는지 비교하며, 텍스트 데이터를 분석하기 위해 함께 작동하는 여러 함수를 구현하는 연습을 하게 됩니다. 이 프로그램은 많은 C 애플리케이션에 필수적인 실제 텍스트 처리 기술을 보여줍니다.

직접 해보기

#include <stdio.h>
#include <string.h>

// TODO: 여기에 extractWord 함수를 작성하세요

// TODO: 여기에 countWordOccurrences 함수를 작성하세요

// TODO: 여기에 analyzeText 함수를 작성하세요

int main() {
    char inputSentence[200];
    char searchWord[50];
    
    // 입력 문장 읽기
    fgets(inputSentence, sizeof(inputSentence), stdin);
    // 줄바꿈 문자가 있는 경우 제거
    inputSentence[strcspn(inputSentence, "\n")] = '\0';
    
    // 검색할 단어 읽기
    scanf("%s", searchWord);
    
    // TODO: 아래에 코드를 작성하세요
    // analyzeText 함수를 호출하고 총 단어 수를 저장하세요
    // countWordOccurrences 함수를 호출하고 발생 횟수를 저장하세요
    // 빈도 백분율을 계산하세요
    // 빈도 범주를 결정하세요
    
    // 요구된 형식으로 결과 출력
    // printf("Total words: %d\n", totalWords);
    // printf("Occurrences of '%s': %d\n", searchWord, occurrences);
    // printf("Frequency: %.1f%%\n", frequency);
    // printf("Category: %s\n", category);
    
    return 0;
}

Logic & Flow의 모든 레슨