1204. Last Person to Fit in the Bus(LeetCode)

minllny·2024년 5월 3일


역대급 문제네요..?? ㅋㅋㅋㅋ
TestCase가 너무 많아요...

일단 오늘은 여기까지 짰고 내일 다시 도오전

WITH T AS (
    SELECT turn
        , person_name
        , weight
        , (SELECT SUM(weight) FROM Queue Q2 WHERE Q2.turn <= Q1.turn) total_weight
    FROM Queue Q1
    ORDER BY turn
)

SELECT CASE WHEN COUNT(*) = 0
        THEN (SELECT person_name FROM T ORDER BY turn DESC LIMIT 1) 
        ELSE person_name END person_name
FROM T
WHERE total_weight >= 1000 
ORDER BY turn 
LIMIT 1

데이터리안 복습자료 참고하니까 total_weight는 쉽게 구할 수 있었는데 !
난해하네요 ^^



나 자신 왜 이렇게 복잡하게 풀었었지..
제 답쿼리는요!

WITH T AS (
    SELECT turn
        , person_name
        , weight
        , (SELECT SUM(weight) FROM Queue Q2 WHERE Q2.turn <= Q1.turn) total_weight
    FROM Queue Q1
    ORDER BY turn
)

SELECT person_name
FROM T
WHERE total_weight <= 1000
ORDER BY turn DESC
LIMIT 1

근데 런타임이 긴 편이라 다른 사람 쿼리도 봅시다 !!


SELECT 
    q1.person_name
FROM Queue q1 JOIN Queue q2 ON q1.turn >= q2.turn
GROUP BY q1.turn
HAVING SUM(q2.weight) <= 1000
ORDER BY SUM(q2.weight) DESC
LIMIT 1

대박이에요.. 조인의 신 .. ㅋㅋㅋㅋ
런타임이 짧진 않지만 굉장히 깔끔한 쿼리입니다 👏👏👏

profile
SQL 끄적끄적

0개의 댓글