정수가 담기는 배열이 있다. 많이 중복되는 정수를 사용자가 원하는 등수만큼 출력해야 한다.
def top_k(nums, k): data = {} for num in nums: data[num] = data.get(num, 0) + 1 # get(key, condtion return)을 사용, dictionary에 키에 해당하는 element가 있는지 판단 및 # 없으면 default로 리턴되는 0에 1씩 더하여 dictionary에 추가, 있으면 갱신 result = [] for i in range(k): max_key = max(data.keys(), key=(lambda result: data[k])) data.pop(max_key) result.append(max_key) return result
정수에 대해 중복 횟수를 어딘가 담아둬야 하므로 key는 정수, value는 중복횟수를 담는 dictionary를 만들어 배열을 순차접근하면서 얻는 정수를 key로 등록한다. 이 때 dictionary에 key 존재여부에 따라 1로 초기화 또는 추가하는 로직을 dictionary.get 함수를 이용하여 한줄로 처리.
dictionary에 있는 values중 가장 큰 값을 얻을때 max(dictionary.values())를 사용하면 되나 우리는 value에 해당하는 key를 얻어야 한다. 이를 위해 max 함수를 아래와 같이 사용.max(data.keys(), key=(lambda k: data[k])
이렇게 하면 가장 큰 value의 해당 key값을 얻을 수 있다.
해설을 위해 pythonGuru를 통해 이해한 정보를 토대로 설명하겠다.max(iterator, default=0, key=func) or max(a,b,c,..., default=0, key=func)
위는 max함수의 parameter 정보이다.
[parameter 1] 은 max값을 구하고자 하는 대상으로 list, string 같은 iterator가 오면된다.
[parameter 2] 은 optional로 만약 iterator가 비어있을시 return받을 값을 입력한다.
[parameter 3] 은 max값을 구할 시 ordering 기준 로직을 담는다.위 algorithm에선 key parameter에 value를 ordering 기준으로 담았다.
즉 keys 중에서 value 값이 가장높은 key를 뽑는 결과를 얻게 된다.