Menu
Coddy logo textTech

복습 - 단어 빈도

Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 104개 중 75번째.

challenge icon

챌린지

쉬움

빈도별로 정렬된 단어 수를 처리하고 표시하는 Word 빈도 분석기를 만들어 봅시다. 이는 지금까지 배운 모든 STL 구성 요소를 함께 활용하는 전형적인 텍스트 처리 작업입니다. 개수를 세기 위한 map, 정렬을 위한 vector, 순회를 위한 반복자, 사용자 지정 정렬 로직을 위한 람다를 사용합니다.

코드를 두 개의 파일로 구성합니다.

  • WordAnalyzer.h: 단어 개수와 분석을 관리하는 WordAnalyzer 클래스를 define합니다.

    클래스 내부에서 std::map<std::string, int>를 사용하여 단어 개수를 저장해야 합니다. 다음 메서드를 Implement합니다.

    • addWord(const std::string& word): given 단어의 개수를 증가시킵니다.
    • getCount(const std::string& word): 특정 단어의 개수를 Returns합니다(찾지 못한 경우 0).
    • getTotalWords(): added된 모든 단어의 총 개수(모든 개수의 합)를 Returns합니다.
    • getUniqueWords(): 고유 단어의 개수(map의 크기)를 Returns합니다.
    • printByFrequency(): 모든 단어를 빈도의 descending 순서로 정렬하여 Prints합니다. 빈도가 같은 단어들은 alphabetically 정렬합니다. 각 줄에는 다음을 표시해야 합니다: word: count

    printByFrequency()에서는 map contents를 pairs의 vector로 옮긴 다음, 개수를 먼저 비교하고(내림차순), 개수가 같은 경우 word를 기준으로 비교하는(오름차순) lambda와 함께 std::sort를 사용해야 합니다.

  • main.cpp: 첫 번째 줄에서 이어질 단어의 개수를 나타내는 정수 n을 Read합니다. 그런 다음 n개의 단어를 한 줄에 하나씩 Read합니다.

    WordAnalyzer를 생성하고 모든 단어를 add한 다음 다음을 표시합니다.

    1. Total words: <count>를 Print합니다.
    2. Unique words: <count>를 Print합니다.
    3. Word frequencies:를 Print한 후 printByFrequency()를 호출합니다.

예를 들어, 다음과 같은 입력이 주어졌을 때:

7
apple
banana
apple
cherry
banana
apple
date

출력은 다음과 같아야 합니다.

Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1

apple이 가장 먼저 나타나고(가장 높은 빈도), 그다음에 banana가 나타나며, cherrydate는 count가 같기 때문에 alphabetically 정렬된다는 점에 주목하세요.

다음은 입력에 대한 또 다른 예시입니다.

5
the
cat
the
sat
the

출력:

Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1

직접 해보기

#include <iostream>
#include <string>
#include "WordAnalyzer.h"

using namespace std;

int main() {
    int n;
    cin >> n;
    
    WordAnalyzer analyzer;
    
    // TODO: n개의 단어를 읽고 analyzer에 추가하세요
    
    // TODO: "Total words: <count>"를 출력하세요
    
    // TODO: "Unique words: <count>"를 출력하세요
    
    // TODO: Print "Word frequencies:" and call printByFrequency()
    
    return 0;
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C++ 컴파일러