[LeetCode-SQL 50] 1204. Last Person to Fit in the Bus

코린이·2025년 6월 10일

SQL 문제 풀이 (MySQL)

목록 보기
81/96

❓ 문제

Queue
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| person_id   | int     |
| person_name | varchar |
| weight      | int     |
| turn        | int     |
+-------------+---------+

person_id 열에는 고유한 값이 포함됩니다.
이 테이블에는 버스를 기다리는 모든 사람들에 대한 정보가 있습니다.
person_id 및 turn 열에는 1부터 n까지의 모든 숫자가 포함되며, 여기서 n은 테이블의 행 수입니다.
turn은 사람들이 버스에 탑승할 순서를 결정하며, turn=1은 가장 먼저 탑승하는 사람을 나타내고 turn=n은 가장 마지막으로 탑승하는 사람을 나타냅니다.
weight는 사람의 체중(킬로그램)입니다.

버스 탑승을 기다리는 사람들이 줄을 서 있습니다. 하지만 버스의 무게 제한이 1000킬로그램이므로 탑승하지 못하는 사람이 있을 수 있습니다.

체중 제한을 초과하지 않고 버스에 탈 수 있는 마지막 사람의 person_name을 찾는 솔루션을 작성하세요. 테스트 케이스는 첫 번째 사람이 체중 제한을 초과하지 않도록 생성됩니다.

한 번에 한 사람만 버스에 탑승할 수 있다는 점에 유의하세요.

자세한 문제 내용은 사이트 참고...


❗️ 문제 풀이

-- 누적값 구하기 : SUM(weight) OVER(ORDER BY turn)

WITH tmp_tb AS (
    SELECT
        person_id
        , person_name
        , SUM(weight) OVER(ORDER BY turn) AS Total_Weight
    FROM Queue
    GROUP BY person_id, person_name    
)
SELECT person_name
FROM tmp_tb
WHERE 1=1
    AND Total_Weight <= 1000
ORDER BY Total_Weight DESC
LIMIT 1
;

🔗 Reference

https://leetcode.com/problems/last-person-to-fit-in-the-bus/description/?envType=study-plan-v2&envId=top-sql-50

0개의 댓글