🔥 연습문제 - WordCount 구현하기

298자
4분

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

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

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

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

단계별 구현 과정

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

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

words := strings.Fields(s)
 
go

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

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

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

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

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

return counts
 
go

최종 코드

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

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

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

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