본문 바로가기
코딩테스트/코딩테스트 문제

코딩테스트: (LeetCode) 692. Top K Frequent Words 파이썬 코드/풀이

by 공부가싫다가도좋아 2022. 10. 19.
반응형

<포스팅 요약>

1. 문제

2. 코드 및 주석 풀이

 

** 제가 직접 풀은 방법으로, 더 좋은 풀이가 있을 수 있으니 참고만 해주세요 ^^


1. 문제

leetcode 문제풀러가기 > 아래 사이트 

https://leetcode.com/problems/top-k-frequent-words/

 

Top K Frequent Words - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

(한글) 문제 간단설명

배열 words와 정수 k가 주어지는데, 

words배열 안에 제일 많이 나타난 단어부터 차례대로 k개의 단어를 배열 형태로 return해준다.

갯수가 같을 경우, 사전순으로 나열한다. (아래 예제 참고하세요)

 

예1, words = ["i", "love", "leetcode", "i", "love", "coding"] , k=3

일때 "i"는 2번, "love"는 2번, "leetcode"는 1번, "coding"은 1번 나타난다. 

 

words배열안에 제일 많이 나타난 단어는 "i"와 "love" 그다음 "leetcode" 와 "coding"이다.

"i"와 "love"가 나타난 횟수가 같으므로 사전순으로 정렬하고( 정렬하면 "i", "love"),

"leetcode"와 "coding"이 나타난 횟수가 같으므로 사전순으로 정렬한다 (정렬하면 "coding", "leetcode").

정렬된 형태는 ["i", "love", "coding", "leetcode"]이다.

k=3 이므로 앞 3개의 단어만 배열형태로 리턴해준다.

 

> return ["i", "love", "coding"] 

 


2. 코드 및 주석 풀이

class Solution:
    def topKFrequent(self, words: List[str], k: int) -> List[str]:
        dic={}
        for word in words:
            if word in dic:
                dic[word]+=1 # dic안에 word가 이미 있으면 +1
            else:
                dic[word]=1 # dic안에 word가 없으면 1로 세팅
        
        # 딕셔너리 형태로 단어의 갯수를 세줌
        
        dic_sort=sorted(dic.items(),key=lambda x:(-x[1],x[0]))
        # 딕셔너리 정렬하기
        # -x[1]은 크기가 큰것부터 정렬, 즉 내림차순
        # x[0]은 사전순으로 정렬
        
        arr=[]
        for i in range(k): # 앞의 k개만 arr배열에 담아줌.
            arr.append(dic_sort[i][0])
        return arr

 

반응형

댓글