ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 771. Jewels and Stones
    Programming/leetcode 2021. 2. 22. 10:31
    728x90

    jewel이 stone에 몇개 들어있는지 세어보는 문제 

     

    1) 이중 for문

        int numJewelsInStones(string J, string S) {
            int cnt = 0;
            for (int i = 0; i<J.size(); i++) {
                for (int j = 0; j < S.size(); j++) {
                    if (J[i] == S[j]) cnt++;
                }
            }
            return cnt;
        }
    

     

    2) in을 이용

        def numJewelsInStones(self, jewels: str, stones: str) -> int:
            cnt = 0
            for s1 in stones:
                if s1 in jewels:
                    cnt += 1
            return cnt

     

    3) dict 이용

            def numJewelsInStones(self, jewels:str, stones:str)->int:
            # J의 각 문자가 S에 몇개 들어있는지 파악하면 되는 문제
            freq = {}
            count = 0
            for ss in stones:
                if ss in freq:
                    freq[ss] = 1
                else:
                    freq[ss] += 1
            for char in jewels:
                if char in freq:
                    count += freq[char]
            return count

     

    4) dict 이용 (default dict 이용)

        def numJewelsInStones(self, jewels:str, stones:str)->int:
            # J의 각 문자가 S에 몇개 들어있는지 파악하면 되는 문제
            freq = collections.defaultdict(int)
            count = 0
            for ss in stones:
                    freq[ss] += 1
            for char in jewels:
                if char in freq:
                    count += freq[char]
            return count
    

     

    5) Counter로 계산하자

        def numJewelsInStones(self, jewels:str, stones:str)->int:
            # J의 각 문자가 S에 몇개 들어있는지 파악하면 되는 문제
            freq = collections.Counter(stones)
            count = 0
            for char in jewels:
                if char in freq:
                    count += freq[char]
            return counter

    6) 근데 위 방법들보다 깔끔하고, 더 빠른 방법이 있다.

    -> 리스트 컴프레션 이용

     

            #stones를 하나씩 가져와서 s에 넣어주고, s가 jewels에 있는지 확인하자
            #sum을 해보면, true일때만 count 증가
            return sum([s in jewels for s in stones])
    

    'Programming > leetcode' 카테고리의 다른 글

    347. Top K Frequent Elements  (0) 2021.02.22
    3. Longest Substring Without Repeating Characters  (0) 2021.02.22
    706. Design HashMap  (0) 2021.02.22
    23. Merge k Sorted Lists  (0) 2021.02.19
    641. Design Circular Deque  (0) 2021.02.19
Designed by Tistory.