Menu
Coddy logo textTech

요약 - 단어 빈도수 계산기

Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 30번째.

challenge icon

챌린지

쉬움

문서 내 단어 빈도를 계산하는 텍스트 분석 도구를 구축하세요. 이 챌린지는 맵(map)이 텍스트 조각에서 각 고유 단어가 나타나는 횟수를 추적하여 데이터를 집계하는 데 얼마나 뛰어난지 보여줍니다.

두 개의 입력을 받게 됩니다:

  • 분석할 텍스트를 나타내는 문자열 (예: "the quick brown fox jumps over the lazy dog the fox is quick")
  • 최소 빈도 임계값을 나타내는 문자열 (예: "2")

중요: 입력 텍스트에는 공백이 포함될 수 있으므로, ReadString('\n')과 함께 bufio.NewReader를 사용하거나 bufio.Scanner를 사용하여 전체 라인을 읽어야 합니다. 텍스트 입력에 fmt.Scanln을 사용하지 마십시오. 첫 번째 공백에서 읽기가 중단되기 때문입니다.

여러분의 과제는 다음과 같습니다:

  1. 텍스트 문자열을 받아 map[string]int를 반환하는 countWords라는 함수를 만듭니다. 여기서:
    • 키(Key)는 개별 단어(문자열)입니다.
    • 값(Value)은 각 단어의 빈도수(정수)입니다.
  2. strings.Fields(모든 공백을 기준으로 분할)를 사용하여 입력 텍스트를 개별 단어로 분할하여 파싱합니다.
  3. 텍스트 내 각 단어의 빈도를 계산합니다:
    • 일관된 계산을 위해 모든 단어를 소문자로 변환합니다.
    • 각 단어에 대해 맵의 카운트를 증가시킵니다.
    • 단어가 맵에 아직 존재하지 않는 경우, 0에서 시작하여 1로 증가합니다.
  4. 임계값 이상으로 나타나는 단어만 표시하도록 결과를 필터링합니다.
  5. 다음 형식으로 결과를 표시합니다:
    • 헤더: "Word Frequency Analysis:"
    • 각 조건에 맞는 단어: "[word]: [count]"
    • 단어를 알파벳 순서로 표시합니다.
  6. 요약 통계를 계산하고 표시합니다:
    • "Total unique words: [total_unique_count]"
    • "Words above threshold: [filtered_count]"
    • "Most frequent word: [word] ([count] times)"

예를 들어, 입력 텍스트 "hello hello world"와 임계값 "2"가 주어지면 출력은 다음과 같아야 합니다:

Word Frequency Analysis:
hello: 2
Total unique words: 2
Words above threshold: 1
Most frequent word: hello (2 times)

전체 입력 라인을 읽기 위해 bufio 패키지를, 텍스트를 분할하고 소문자로 변환하기 위해 strings 패키지를, 임계값 문자열을 정수로 변환하기 위해 strconv 패키지를, 단어를 알파벳순으로 정렬하기 위해 sort 패키지를 사용하세요. 이 챌린지는 맵의 제로 값(zero-value) 동작이 카운팅 로직을 단순하고 효율적으로 만들어 주어, 맵이 데이터를 카운팅하고 집계하는 데 얼마나 우아한 솔루션을 제공하는지 보여줍니다.

직접 해보기

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)

	// 텍스트 한 줄 전체를 읽습니다 (공백 포함)
	scanner.Scan()
	text := scanner.Text()

	// 임계값을 읽습니다
	scanner.Scan()
	thresholdStr := scanner.Text()

	// 임계값을 정수로 변환합니다
	threshold, _ := strconv.Atoi(thresholdStr)

	// TODO: 아래에 코드를 작성하세요
	// 1. map[string]int를 반환하는 countWords 함수를 만듭니다
	//    힌트: strings.Fields와 strings.ToLower를 사용하여 단어를 분리하고 정규화하세요
	// 2. 함수를 사용하여 단어 빈도를 계산합니다
	// 3. 최소 'threshold'번 이상 나타나는 단어들을 필터링합니다
	// 4. 필터링된 단어들을 알파벳 순으로 정렬하고 출력합니다
	// 5. 요약 통계를 계산하고 출력합니다

	_ = text
	_ = threshold
	fmt.Println("Word Frequency Analysis:")
}

로직 & 흐름의 모든 레슨