Growth ๐ŸŒณ/Practice ๐Ÿ’ป

[LeetCode] 601. Human Traffic of Stadium

์ธ” 2023. 5. 11. 16:42

๐Ÿ“ข ๋ณธ ํฌ์ŠคํŒ…์— ํ™œ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๋ฌธ์ œ ๋ฐ ์ž๋ฃŒ ์ถœ์ฒ˜๋Š”

       ๋ฆฌํŠธ์ฝ”๋“œ Problems, https://leetcode.com/problemset/all/์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค.


โ–  ๋ฌธ์ œ

https://leetcode.com/problems/human-traffic-of-stadium/description/

 

Human Traffic of Stadium - LeetCode

Can you solve this real interview question? Human Traffic of Stadium - Table: Stadium +---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | visit_date | date | | people | int | +---------------+---------+ visit_date

leetcode.com

Table : Stadium

Write an SQL query to display the records with three or more rows with consecutive id's, and the number of people is greater than or equal to 100 for each.

Return the result table ordered by visit_date in ascending order.

The query result format is in the following example.


โ–  ํ’€์ด

  ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ  

์•„์ด๋””๊ฐ€ 3๊ฐœ ์ด์ƒ ์—ฐ์†์ด๋ฉด์„œ ๊ฐ ๋ฐฉ๋ฌธ์ž ์ˆ˜๊ฐ€ 100 ์ด์ƒ์ธ ํ–‰์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์ฆ‰, ์œ„ ์•„๋ž˜ ํ–‰์˜ ๋ฐฉ๋ฌธ์ž ์ˆ˜๊ฐ€ 100 ์ด์ƒ์ธ ํ–‰์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.์ด์ „ํ–‰, ๋‹ค์Œํ–‰์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” LEAD(), LAG() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.๋‹จ, ์›๋ž˜ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์ด ๊ธฐ์ค€ํ–‰์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ์ค€ํ–‰ ์•ž 2ํ–‰, ๋’ค2ํ–‰์„ ๋ชจ๋‘ ๋”ฐ์ ธ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๋ฌธ์ œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ด ์„ธ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.


(id์ปฌ๋Ÿผ ์˜ค๋ฆ„์ฐจ์ˆœ ๊ธฐ์ค€)

๊ธฐ์ค€ํ–‰-2 people๊ฐ’ ๊ธฐ์ค€ํ–‰-1 people๊ฐ’ ๊ธฐ์ค€ํ–‰ people๊ฐ’ ๊ธฐ์ค€ํ–‰+1 people๊ฐ’ ๊ธฐ์ค€ํ–‰+2 people๊ฐ’
A B C D E

  โœ” case1 | C์™€ A, B๊ฐ€ ๊ฐ๊ฐ 100๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ

  โœ” case2 | C์™€ B, D๊ฐ€ ๊ฐ๊ฐ 100๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ

  โœ” case3 | C์™€ D, E๊ฐ€ ๊ฐ๊ฐ 100๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ


case๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด WHERE์ ˆ์— ์กฐ๊ฑด์œผ๋กœ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. 

WITH T1 AS (SELECT id, visit_date, people
    ,lead(people, 1) OVER (order by id) AS da1_people
    ,lead(people, 2) OVER (order by id) AS da2_people
    ,lag(people, 1) OVER (order by id) AS db1_people
    ,lag(people, 2) OVER (order by id) AS db2_people
    FROM stadium)

SELECT id, visit_date, people
 FROM T1
 WHERE T1.people >= 100 AND ((T1.da1_people >= 100 AND T1.da2_people >= 100)
                        OR (T1.db1_people >= 100 AND T1.da1_people >= 100)
                        OR (T1.db1_people >= 100 AND T1.db2_people >= 100))

โœ ๊ฐœ์ธํšŒ๊ณ 

์ฒ˜์Œ์— LEADํ•จ์ˆ˜๋งŒ ์‚ฌ์šฉํ•ด์„œ ๋งˆ์ง€๋ง‰ id 2ํ–‰์ด people๊ฐ’์ด 100 ์ด์ƒ ์ž„์—๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์—์„œ ๋ง‰ํ˜”๋‹ค.

์•„๋ž˜ 2ํ–‰์„ ๋”ฐ๋กœ ์ถœ๋ ฅํ•  ๋ฐฉ๋ฒ•๋งŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ธฐ์ค€ํ–‰ ์•ž2๊ฐœ ๋’ค2๊ฐœ๊นŒ์ง€ ์ปฌ๋Ÿผ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๋ณด๋‹ˆ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ํ–‰์„ ๋ˆ„๋ฝ์—†์ด ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

WHERE ์กฐ๊ฑด์ ˆ๋„ ๊ธฐ์กด์— AND, OR๋งŒ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๋‚˜๋ˆ„๋Š” ์กฐ๊ฑด์„ ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 ๋ฌธ์ œ์—์„œ ํ•œ๋ฒˆ ์‚ฌ์šฉํ•œ ๋ฌธ๋ฒ•์€ ์ž˜ ๊ธฐ์–ตํ•ด๋‘˜ ๊ฒƒ!

 

'Growth ๐ŸŒณ > Practice ๐Ÿ’ป' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[LeetCode] 608. Tree Node  (0) 2023.05.16
[LeetCode] 602. Friend Requests II: Who Has the Most Friends  (0) 2023.05.12
[LeetCode] 577. Employee Bonus  (0) 2023.05.10
[LeetCode] 585. Investments in 2016  (0) 2023.05.09
[LeetCode] 570. Managers with at Least 5 Direct Reports  (0) 2023.04.24