등수 구하기 algorithm

백승진·2020년 11월 12일
0

분석

정수가 담기는 배열이 있다. 많이 중복되는 정수를 사용자가 원하는 등수만큼 출력해야 한다.

풀이

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를 뽑는 결과를 얻게 된다.

profile
12년 .NET 개발 경력을 가진 웹 초짜 개발자입니다 :)

0개의 댓글

관련 채용 정보