Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 동적계획법
- javascript
- 소프티어
- 티스토리챌린지
- Lv. 2
- Dynamic Programming
- Lv. 0
- bfs
- Python
- softeer
- join
- Lv. 3
- 자바스크립트
- LEVEL 2
- 너비 우선 탐색
- 오블완
- C언어
- SQL
- SQL 고득점 KIT
- DP
- programmers
- Java
- dfs
- level 3
- Lv. 1
- 파이썬
- group by
- 깊이 우선 탐색
- 프로그래머스
- select
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
코드트리 | HashMap / 자주 등장한 top k 숫자 {언어 : Python} 본문
문제 링크
https://www.codetree.ai/trails/complete/curated-cards/challenge-top-k-frequent-elements/description
정답 코드
n, k = map(int, input().split())
arr = list(map(int, input().split()))
# Write your code here!
stack = []
dictArr = dict()
for num in arr:
if dictArr.get(num, 0):
dictArr[num] += 1
else:
dictArr[num] = 1
itemsArr = sorted(list(dictArr.items()), key=lambda x:(x[1], x[0]), reverse=True)
for i in range(k):
iak, iav = itemsArr[i]
print(iak, end=" ")
다른 사람 풀이
n, k =map(int, input().split())
arr = list(map(int, input().split()))
freq = dict()
for num in arr:
if num in freq:
freq[num]+=1
else:
freq[num]=1
topk=dict()
keys = []
for key, value in freq.items():
if value in topk:
topk[value].append(key)
else:
topk[value] = [key]
keys.append(value)
keys = sorted(keys, reverse=True)
for key, value in topk.items():
topk[key] = sorted(topk[key],reverse=True)
for num in keys:
if k<=0:
break
for answer in topk[num]:
if k<=0:
break
print(answer, end=" ")
k-=1
풀이 방법
- 입력 받기:
- n, k는 숫자의 개수와 출력할 숫자의 개수.
- arr는 숫자가 담긴 배열.
- 빈도 계산:
- freq 딕셔너리를 만들어 배열 arr의 각 숫자가 몇 번 등장했는지 저장한다.
- 딕셔너리의 key는 숫자, value는 등장 횟수.
- 빈도를 기준으로 그룹화:
- topk 딕셔너리를 만들어, 등장 횟수를 기준으로 숫자를 그룹화한다.
- 딕셔너리의 key는 등장 횟수, value는 해당 등장 횟수를 가진 숫자의 리스트.
- 정렬:
- 등장 횟수를 나타내는 key 값들을 keys 리스트에 모아, 내림차순으로 정렬한다.
- 각 등장 횟수에 속하는 숫자 리스트들도 내림차순으로 정렬한다.
- 출력:
- 등장 횟수가 높은 숫자부터 k개를 차례대로 출력한다.
- k가 0이 되면 반복을 멈춘다.
느낀점
- 속도가 283ms 와 96ms로 차이가 날 정도로 아래 코드가 더 효율적이다.
- lambda 오랜만에 써서 어떻게 쓰나 했다.
- sorted에 정렬을 하기 위해 key=을 사용해야 한다.
- 다 까먹었다...
'알고리즘' 카테고리의 다른 글
Softeer [Level 2] 나무 공격 {언어 : JavaScript} (2) | 2024.11.08 |
---|---|
Softeer [Level 3] [한양대 HCPC 2023] Pipelined {언어 : JavaScript} (1) | 2024.11.01 |
프로그래머스 [Lv. 2] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 {언어 : Python} (0) | 2024.09.27 |
프로그래머스 [Lv. 1] [PCCP 기출문제] 1번 / 동영상 재생기 {언어 : JavaScript} (1) | 2024.09.26 |
프로그래머스 [Lv. 3] 표 병합 {언어 : Python} (0) | 2024.08.06 |