[Go-Tour] 맵 연습하기

mmoo·2022년 5월 22일
0

Go-Tour

목록 보기
2/2
post-thumbnail

맵 연습하기 링크

문제

WordCount를 구현해봅시다. 이것은 문자열 s 의 각 word의 개수의 맵을 반환해야 합니다. wc.Test 함수는 제공된 함수를 테스트하고 성공 혹은 실패를 출력하는 함수입니다. strings.Fields가 도움이 될 수 있습니다.

번역이 또… 조금 이상하다

👉 조건 정리

  • 문자열 s가 주어진다.
  • 주어진 문자열을 단어 단위로 나눈다.
  • 나뉜 단어들이 몇번씩 쓰였는지 맵으로 기록한다.
  • wc.Test 함수로 우리가 작성한 함수를 여러 테스트 케이스로 테스트 해준다. (모두 PASS 해야함)

바로 구현에 들어가보자..!

코드

    package main
    
    import (
    	"golang.org/x/tour/wc"
    	"strings"
    )
    
    func WordCount(s string) map[string]int {
    	words := strings.Fields(s)
    	result := make(map[string]int)
    	
    	for _,w := range words {
    		if result[w] == 0 {
    			result[w] = 1
    		}else{
    			result[w] = result[w] + 1
    		}
    	}
    	return result
    }
    
    func main() {
    	wc.Test(WordCount)
    }

우선 strings.Fields로 문자열을 단어 단위의 배열로 반환한다.

반환된 배열을 for 문으로 돌면서, 맵에 이미 해당 단어의 key가 있는지 확인한다.
비어있는 key 값은 zero value를 반환하므로, 값이 0 인지 if 문을 주었다.
(value, ok = result[w] 를 사용하면 ok에 true, false로 key가 있는지 확인해주므로, 이를 사용하여 코드를 짜도 된다.)

마지막으로 result를 반환하면 끝🤠

결과

PASS
 f("I am learning Go!") = 
  map[string]int{"Go!":1, "I":1, "am":1, "learning":1}
PASS
 f("The quick brown fox jumped over the lazy dog.") = 
  map[string]int{"The":1, "brown":1, "dog.":1, "fox":1, "jumped":1, "lazy":1, "over":1, "quick":1, "the":1}
PASS
 f("I ate a donut. Then I ate another donut.") = 
  map[string]int{"I":2, "Then":1, "a":1, "another":1, "ate":2, "donut.":2}
PASS
 f("A man a plan a canal panama.") = 
  map[string]int{"A":1, "a":2, "canal":1, "man":1, "panama.":1, "plan":1}

이런 결과물이 나온다! 🥳🥳🥳

profile
팔수록 모르는게 계속 나와💩

0개의 댓글