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
- 티스토리챌린지
- 딕셔너리
- 분산
- 코딩테스트
- 우선순위큐
- 데이터 엔지니어링
- 빅데이터
- Data Engineering
- 알고리즘
- 스파크
- HDFS
- 도커
- 아파치 하둡
- 리트코드
- 파이썬
- 이진탐색
- docker
- Apache Hadoop
- 프로그래머스
- 분산처리
- leetcode
- 아파치 스파크
- Python
- heapq
- 오블완
- Spark
- Hadoop
- programmers
- Apache Spark
- 하둡
Archives
- Today
- Total
래원
[LeetCode] 2558. Take Gifts From the Richest Pile (Python) 본문
알고리즘/LeetCode
[LeetCode] 2558. Take Gifts From the Richest Pile (Python)
Laewon Jeong 2024. 12. 12. 19:46
난이도: Easy
문제 설명
You are given an integer array gifts denoting the number of gifts in various piles. Every second, you do the following:
- Choose the pile with the maximum number of gifts.
- If there is more than one pile with the maximum number of gifts, choose any.
- Leave behind the floor of the square root of the number of gifts in the pile. Take the rest of the gifts.
Return the number of gifts remaining after k seconds.
문제 예제
Example 1:
Input: gifts = [25,64,9,4,100], k = 4
Output: 29
Explanation:
The gifts are taken in the following way:
- In the first second, the last pile is chosen and 10 gifts are left behind.
- Then the second pile is chosen and 8 gifts are left behind.
- After that the first pile is chosen and 5 gifts are left behind.
- Finally, the last pile is chosen again and 3 gifts are left behind.
The final remaining gifts are [5,8,9,4,3], so the total number of gifts remaining is 29.
Example 2:
Input: gifts = [1,1,1,1], k = 4
Output: 4
Explanation:
In this case, regardless which pile you choose, you have to leave behind 1 gift in each pile.
That is, you cant take any pile with you.
So, the total gifts remaining are 4.
제한 사항
- 1 <= gifts.length <= 10^3
- 1 <= gifts[i] <= 10^9
- 1 <= k <= 10^3
✏️Solution(솔루션)
class Solution(object):
def pickGifts(self, gifts, k):
gifts = [-gift for gift in gifts]
heapq.heapify(gifts)
for _ in range(k):
max_gift = heapq.heappop(gifts)
heapq.heappush(gifts, -floor(sqrt(-max_gift)))
return int(-sum(gifts))
문제만 잘 이해하면 별로 어렵지 않은 문제인 것 같다.
결국에는 gifts에서 max값을 뽑아 square root를 취해 내림하는데 이 작업을 k번 하면된다.
모든 작업이 끝났을 때 gifts의 전체 요소 합을 return 하면 정답을 맞출 수 있다.
풀 수 있는 다양한 방법이 있겠지만, 나는 heapq를 사용해 제일 큰 값을 뽑고 그 값에 필요한 연산을 취한다음 다시 heapq에 넣는 방식으로 문제를 해결했다.