[golang] LeetCode #771. Jewels and Stones

kameals·2019년 12월 31일
1

leetcode

목록 보기
5/14
post-thumbnail

1.문제

보석을 대변하는 문자열 J가 주어지고, 원석으로 대변되는 문자열 S가 주어진다.
J는 S에서 보석을 구분할 수 있는 문자열이 들어있다.
S에 얼마나 많은 보석이 포함되어 있는지를 반환한다. 대소문자를 구분한다.

2.접근

// 주어진 J를 각 문자에 대한 배열로 만든다. stings.Split() 활용
// 각 문자열이 S에 몇개 포함하는 지를 구한다. strings.Count() 활용
// 합을 구한다.

3. 내가 작성한 답

func numJewelsInStones(J string, S string) int {
    js := strings.Split(J, "")
    sum := 0
    for _, j := range js {
        c  := strings.Count(S, j)
        sum += c
    }
    return sum
}

4. 다른 유저의 답안

1.

func NumJewelsInStones(J string, S string) int {
	var m map[int32]bool = make(map[int32]bool);
	for _, i := range J{
		m[i] = true
	}
	res := 0;
	for _, i := range S{
		if flag, ok := m[i]; ok{
			if flag{
				res++;
			}
		}
	}
	return res;
}

2.

func numJewelsInStones(J string, S string) int {
    jewels := make(map[string]struct{})
    for i := range J {
        jewels[string(J[i])] = struct{}{}
    }
    
    cnt := 0
    for i := range S {
        if _, ok := jewels[string(S[i])]; ok {
            cnt++
        }
    }
    
    return cnt
}

go에서 제공하는 함수를 안 쓰고 도전해야 하는건가 싶어졌다..(?)

5. 추가로 공부한 내용

go-tour 맵 (Maps)
go-tour 맵 리터럴 (Map literals)

profile
팀의 윤활유 역할이 되고 싶은 소박한 개발자입니다. 좌우명은 '밝고 바르고 튼튼하자'

0개의 댓글