Algorithm๐Ÿค/SQL

[๋ฆฌํŠธ์ฝ”๋“œ] 1204. Last Person to Fit in the Bus - ๋ˆ„์ ํ•ฉ sum(์ปฌ๋Ÿผ) over (order by ์ปฌ๋Ÿผ), with ํ•ฉ์น˜๊ธฐ โœ”๏ธโœ”๏ธโœ”๏ธ

ํŒŒ์นดํŒŒ์˜ค 2024. 6. 25. 16:37

 

# ๋ฌธ์ œ

https://leetcode.com/problems/last-person-to-fit-in-the-bus/description/

 

# ๋ฌธ์ œ ์š”์•ฝ

 

์ด ๋ฌด๊ฒŒํ•ฉ์ด 1000์ดํ•˜์ธ ์ƒํƒœ์—์„œ ๋งˆ์ง€๋ง‰ ํƒ‘์Šนํ•œ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„ ๊ตฌํ•˜๊ธฐ

 

 

# ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„

์ด ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•ด์„œ @set์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ค„ ์•Œ์•˜๋‹ค

 

# ํ•ต์‹ฌ ๊ฐœ๋…

 

๋ˆ„์ ํ•ฉ์„ ๊ณ„์‚ฐํ• ๋•Œ, ์œˆ๋„์šฐ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

 

sum(์ปฌ๋Ÿผ) over (order by ์ปฌ๋Ÿผ) ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค

 

sum(weight) over (order by turn)

 

 

# ์ฝ”๋“œ ํ™•์ธ

with cte as (
    select *,
           sum(weight) over (order by turn) as num,
           case when sum(weight) over (order by turn) <= 1000 then 'yes'
                else 'no' end as 'yes_no'
    from Queue
    order by turn
)
select *
from cte

 

 

 

 

# ์ •๋‹ต ์ฝ”๋“œ

with cte as (
    select *,
           sum(weight) over (order by turn) as num,
           case when sum(weight) over (order by turn) <= 1000 then 'yes'
                else 'no' end as 'yes_no'
    from Queue
    order by turn
)
select person_name
from cte
where num = (select max(num)
             from cte
             where yes_no = 'yes')