🔥 연습문제 - WordCount 구현하기

298자
4분

Go 언어에서 문자열에 포함된 각 단어의 빈도수를 세는 WordCount 함수를 구현해 보겠습니다. 이 함수는 문자열 s를 입력으로 받고, 각 단어의 빈도수를 담은 맵을 반환하게 됩니다.

먼저, 주어진 코드를 보면 다음과 같습니다:

go
package main
 
import (
	"golang.org/x/tour/wc"
)
 
func WordCount(s string) map[string]int {
	return map[string]int{"x": 1}
}
 
func main() {
	wc.Test(WordCount)
}
 
go
package main
 
import (
	"golang.org/x/tour/wc"
)
 
func WordCount(s string) map[string]int {
	return map[string]int{"x": 1}
}
 
func main() {
	wc.Test(WordCount)
}
 

WordCount 함수는 현재 간단히 "x": 1이라는 키-값 쌍을 가진 맵을 반환하고 있네요. 하지만 우리는 이 함수를 문자열에 포함된 단어의 실제 빈도수를 세도록 구현해야 합니다.

단계별 구현 과정

1단계: 문자열을 단어로 분리하기

우선 문자열을 개별 단어로 분리해야 합니다. 이를 위해 strings 패키지의 Fields 함수를 사용할 수 있습니다. 이 함수는 문자열을 공백을 기준으로 분리하여 단어의 슬라이스를 반환합니다.

go
words := strings.Fields(s)
 
go
words := strings.Fields(s)
 

2단계: 단어의 빈도수 세기

다음으로, 각 단어의 빈도수를 저장할 맵을 생성합니다. 그리고 for 루프를 사용하여 단어 슬라이스를 순회하면서, 각 단어를 맵의 키로 사용하여 빈도수를 증가시킵니다.

go
counts := make(map[string]int)
for _, word := range words {
    counts[word]++
}
 
go
counts := make(map[string]int)
for _, word := range words {
    counts[word]++
}
 
  • counts := make(map[string]int): 단어의 빈도수를 저장할 맵을 생성합니다.
  • for _, word := range words: 단어 슬라이스를 순회하면서 각 단어에 대해 루프를 실행합니다.
  • counts[word]++: 현재 단어를 맵의 키로 사용하여 해당 단어의 빈도수를 1 증가시킵니다. 맵에 해당 단어가 없으면 자동으로 0에서 시작합니다.

3단계: 빈도수 맵 반환하기

마지막으로 counts 맵을 반환하여 함수를 완성합니다.

go
return counts
 
go
return counts
 

최종 코드

위의 단계를 모두 합치면 다음과 같은 WordCount 함수를 구현할 수 있습니다:

go
func WordCount(s string) map[string]int {
    words := strings.Fields(s)
    counts := make(map[string]int)
    for _, word := range words {
        counts[word]++
    }
    return counts
}
 
go
func WordCount(s string) map[string]int {
    words := strings.Fields(s)
    counts := make(map[string]int)
    for _, word := range words {
        counts[word]++
    }
    return counts
}
 

이제 main 함수에서 wc.Test(WordCount)를 호출하면, WordCount 함수에 대한 테스트 케이스가 실행됩니다. 모든 테스트를 통과하면 성공 메시지가 출력될 거예요.

이렇게 Go 언어에서 문자열의 단어 빈도수를 세는 WordCount 함수를 구현해 보았습니다. 이 함수는 strings.Fields를 사용하여 문자열을 단어로 분리하고, 맵을 사용하여 각 단어의 빈도수를 저장하는 방식으로 동작하죠.

YouTube 영상

채널 보기
내적의 기하학적 의미와 코사인 유사도 원리 | 선형대수학
Trie 자료구조 완전 정복 - 개념부터 시각화까지 | Trie 자료구조 이야기
13편, 인덱스가 많으면 왜 느려질까? 쓰기 증폭과 인덱스 튜닝의 이해
트라이(Trie) 자료구조: 파이썬으로 삽입(Insert) 연산 구현하기 | Trie 자료구조 이야기
스칼라 곱셈과 내적의 기하학적 의미 | 선형대수학
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
AI를 위한 선형대수학 - 소개 | 선형대수학
Trie(트라이) 자료구조 원리와 파이썬 클래스 설계 및 구현 | Trie 자료구조 이야기