🔥 연습문제 - 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
를 사용하여 문자열을 단어로 분리하고, 맵을 사용하여 각 단어의 빈도수를 저장하는 방식으로 동작하죠.