본문 바로가기
알고리즘

[알고리즘] Jewels and Stones

by keel_im 2021. 3. 8.
반응형

포인트

1. 해시를 이용하여 Counter 및 개수를 확인하는 방법

🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다. 

c++/cpp

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int numJewelsInStones(string jewels, string stones)
    {
        unordered_map<char, int> map;

        for (auto ele : stones)
        {
            map[ele] += 1;
        }

        int cnt = 0;
        for (auto ele : jewels)
        {
            cnt += map[ele];
        }

        return cnt;
    }
};

python

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        return list(zip(*Counter(nums).most_common(k)))[0]

version 2

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        freqs = Counter(nums)
        heaps = []
        # 힙에 음수로 삽입
        for f in freqs:
            heapq.heappush(heaps, (-freqs[f], f))

        result = []
        # k번 만큼 추출, 민 힙 이므로 가장 작은 음수 순으로 추출
        for _ in range(k):
            result.append(heapq.heappop(heaps)[1])

        return result
반응형

댓글