본문 바로가기
Study/Algorithm

[LeetCode] #771. Jewels and Stones (python)

by 투말치 2022. 3. 9.

목차

    반응형

    문제

    https://leetcode.com/problems/jewels-and-stones/

     

    Jewels and Stones - LeetCode

    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

    leetcode.com

     

    jewels에는 돌 중에 보석으로 분류되는 문자들이 있고 stones에는 돌을 나타내는 문자들이 있다. 돌 중에 보석인 것들의 개수를 반환하면 된다. 소문자와 대문자는 구분한다.

     

    예시 입출력

    Input:
    jewels = "aA", stones = "aAAbbbb"
    Output:
    3

     

    풀이

     

    내 풀이

    class Solution:
        def numJewelsInStones(self, jewels: str, stones: str) -> int:
            check=list(jewels)
            count=0
            for s in stones:
                if s in check:
                    count+=1
            return count

    확인해야 하는 jewels를 리스트로 만들어서 문자별로 구분하고 stones의 문자들과 하나씩 비교했다.

     

     

    책 풀이

     

    1. Counter 사용
    import collections
    
    
    class Solution:
        def numJewelsInStones(self, J: str, S: str) -> int:
            freqs = collections.Counter(S)  # 돌(S) 빈도 수 계산
            count = 0
    
            # 비교 없이 보석(J) 빈도 수 합산
            for char in J:
                count += freqs[char]
    
            return count

    Counter 객체로 빈도수를 계산한다. Counter에서는 존재하지 않는 키를 조회해도 0을 출력하기 때문에 따로 에러처리를 할 필요가 없다.

     

     

    2. 리스트 컴프리헨션
    class Solution:
        def numJewelsInStones(self, J: str, S: str) -> int:
            return sum(s in J for s in S)

    S의 문자 s가 J에 포함되는지 확인한다. 그러면 결과에 따라 True, False가 반환되는데 해당 값을 sum()으로 합산하는 것이다.

     

     

     

    참고한 책 : 파이썬 알고리즘 인터뷰

    반응형