🔥 연습문제 - 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 영상

채널 보기
Git Worktree로 여러 피처 동시에 개발하기 | AI 코딩 시대의 필수 스킬
NestJS 역할 기반 접근 권한 부여 - Guard, Reflector | NestJS 가이드
함수 타입과 Hom-Set 이해하기 | 프로그래머를 위한 카테고리 이론
C++ 속의 펑터 | 프로그래머를 위한 카테고리 이론
클로드 섀넌이 들려주는 정보 이론 이야기
변환 파이프로 컨트롤러 코드 깔끔하게 만들기 | NestJS 가이드
NestJS 가드, 바이딩과 스코프 | NestJS 가이드
존 매카시가 들려주는 인공지능의 탄생 이야기