CodeKata Week2- Day4

신지원·2021년 4월 8일
0

문제

nums는 숫자로 이루어진 배열입니다.

가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.

nums = [1,1,1,2,2,3],
k = 2
return [1,2]

nums = [1]
k = 1
return [1]

내 풀이

def top_k(nums,k):
    dict = {}
    result = []

    for num in nums:
        dict[num] = nums.count(num)     # 현재 딕셔너리 형태{8: 3, 7: 2, 3: 1}

    for j in range(k):
        max_length = max(dict, key = dict.get)   
        result.append(max_length)
        dict.pop(max_length)   
    return result

print(top_k([8,8,8,7,7,3],2))

dict.get 해당하는 키를 넣으면 value값을 뺴온다.
max(dict, key = dict.get) => value값을 기준으로 해서 제일 높은 key를 리턴한다.

새롭게 배운것

  • max(dict)
    딕셔너리의 최대 값을 가지는 key 구하기
  • max(dict.values())
    딕셔너리의 최대 값을 가지는 value 구하기
dicts = {"3": 1, "2": 2, "1": 3}

print("딕셔너리 dicts의 values를 이용한 최대 값 구하기: %d" % max(dicts.values()))
print("딕셔너리 dicts의 values를 이용한 최소 값 구하기: %d" % min(dicts.values()))

print("딕셔너리 dicts의 최대 값을 가지는 키 구하기: ", max(dicts))
print("딕셔너리 dicts의 최소 값을 가지는 키 구하기: ", min(dicts))


딕셔너리 dicts의 values를 이용한 최대 값 구하기: 3
딕셔너리 dicts의 values를 이용한 최소 값 구하기: 1

딕셔너리 dicts의 최대 값을 가지는 키 구하기:  3
딕셔너리 dicts의 최소 값을 가지는 키 구하기:  1
  • dict.pop()
    ()안에 지우기를 원하는 요소의

- 딕셔너리의 get 함수

Tv = {'BreakingBad':100, 'GameOfThrones':1292, 'TMKUC' : 88}

print(Tv.get('BreakingBad'))
# 100

Tv.get('찾고자 하는 key', default)

선언된 dict에 key가 있으면, 그에 해당하는 value를 출력해준다.
default 값을 선언해주면 찾고자 하는 key가 없을때 default 값이 리턴된다.

- max함수 [max('', key=)]

예1) value를 기준으로 가장 큰 값의 key를 구할 때

Tv = {'BreakingBad':100, 'GameOfThrones':1292, 'TMKUC' : 88}
  
Keymax = max(Tv, key=Tv.get)  #Tv의 value를 기준으로 가장 큰 값의 key 값을 구한다. 

print(Keymax)

#GameOfThrones

key 함수를 값으로 넣는다. lambda를 사용할 수 있다. key= function을 기준으로 최대, 최솟값을 찾는다.

key가 하는 역할
max 함수의 key는 어떻게 아이템을 정렬시킬지 결정하는데 사용된다.
즉, 어떤 기준으로 max 값을 구할지를 정하는 거

예2) 절대값을 찾는 함수 abs를 key값으로 넣을때

min(-5, 3, 0, 3, -5, key=abs)
#0

nums = [-5, 3, 0, 3, -5]
max(nums, key=abs)
#-5

예3) 나머지를 구하는 lambda 식을 key 값으로 넣을 때

nums = [-5, 3, 0, 3, -5]
min(nums, key= lambda x : x%3 )
# 3

max(-5, 3, 0, 3, -5, key= lambda x : x%3 )
# -5

0개의 댓글