반응형
<포스팅 요약>
** 제가 직접 풀은 방법으로, 더 좋은 풀이가 있을 수 있으니 참고만 해주세요 ^^
1. 문제
leetcode 문제풀러가기 > 아래 사이트
https://leetcode.com/problems/top-k-frequent-words/
(한글) 문제 간단설명
배열 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
반응형
'코딩테스트 > 코딩테스트 문제' 카테고리의 다른 글
(백준) 9625번: BABBA 파이썬 풀이(DP풀이) (2) | 2022.11.21 |
---|---|
(백준) 1655 가운데를 말해요 문제 코드 분석 (상세하게) (2) | 2022.10.26 |
코딩테스트: (LeetCode) 48. Rotate Image 파이썬 코드/풀이 (2) | 2022.08.30 |
프로그래머스 - 순위 검색 Lv2 풀이/주석/자세한 설명 (0) | 2022.08.10 |
코딩테스트 문제: (LeetCode) Sqrt(x) - 자바스크립트 (0) | 2022.07.28 |
댓글