leetcode : 1204. Last Person to Fit in the Bus
다이어그램
erDiagram
PERSON {
int person_id PK
varchar person_name
int weight
int turn
}
목표
무게제한 막차 탄 사람 이름 구하기
문제 풀이
MySQL
WITH ORDERED AS (
SELECT
PERSON_NAME,
SUM(WEIGHT) OVER (ORDER BY TURN) AS TOTAL_WEIGHT
FROM QUEUE
)
SELECT PERSON_NAME
FROM ORDERED
WHERE TOTAL_WEIGHT <= 1000
ORDER BY TOTAL_WEIGHT DESC
LIMIT 1
- 윈도우 함수를 사용해서 문제풀이.
- weight에 누적합을 적용하고 대기 순서 turn으로 정렬을 걸어준다.
- 누적합이 1000이 넘지 않는 사람들의 쿼리를 역순을 정렬하고 하나 뽑아주기.
Pandas
# Solution 1
def last_passenger(queue: pd.DataFrame) -> pd.DataFrame:
ordered = queue.sort_values('turn')
ordered['total_weight'] = ordered['weight'].cumsum()
answer = ordered[ordered['total_weight']<=1000]
return answer[['person_name']].tail(1)
- Solution 1
- SQL처럼 한 번에 정렬 + 누적합은 불가능해서 두 번 나눠서 풀이.
- 정렬 이후에 cumsum으로 누적합을 구해준다.
- iloc대신 tail 또는 head를 사용해서 앞에 있는 데이터프레임을 추출하기.
코멘트
- .
'Data Analysis > Query' 카테고리의 다른 글
leetcode : 1280. Students and Examinations (0) | 2025.01.21 |
---|---|
leetcode : 1251. Average Selling Price (0) | 2025.01.20 |
leetcode : 1211. Queries Quality and Percentage (0) | 2025.01.19 |
leetcode : 1193. Monthly Transactions I (0) | 2025.01.17 |
leetcode : 1164. Product Price at a Given Date (0) | 2025.01.16 |
leetcode : 1174. Immediate Food Delivery II (0) | 2025.01.16 |
leetcode : 1158. Market Analysis I (0) | 2025.01.15 |
댓글