susinlee 님의 블로그
109. Consecutive Numbers 본문
[문제]
https://leetcode.com/problems/consecutive-numbers/description/
[풀이]
1. 이전 행의 num 값과 다음 행의 num 값을 불러와서 현재 num 값과 비교한 후 같다면 해당 num을 반환하면 된다.
2. shift 함수로 이를 구현하고 num을 반환할 때 중복제거를 해주자.
Pandas
import pandas as pd
def consecutive_numbers(logs: pd.DataFrame) -> pd.DataFrame:
logs['lag'] = logs.num.shift(1)
logs['lead'] = logs.num.shift(-1)
return pd.DataFrame({
'ConsecutiveNums' : logs[(logs.num==logs.lag) & (logs.num==logs.lead)]['num'].unique()
})
다른 방법으로는 rolling 함수를 통해 슬라이딩 윈도우 기법을 구현해서 분산값을 구해주면 되는데
세 개의 값(window=3) 에서 분산이 0이면 값의 차이가 없다는 뜻이 되므로 이를 이용해준다.
import pandas as pd
def consecutive_numbers(logs: pd.DataFrame) -> pd.DataFrame:
logs['var'] = logs['num'].rolling(window=3).var()
return pd.DataFrame({
'ConsecutiveNums' : logs[logs['var']==0]['num'].unique()
})
SQL
SELECT
DISTINCT(num) AS ConsecutiveNums
FROM
(
SELECT
*
, LAG(num) OVER() AS num_log
, LEAD(num) OVER() AS num_lead
FROM Logs
) sub
WHERE
num = num_log
AND num = num_lead
'코드카타 > Pandas' 카테고리의 다른 글
111. Last Person to Fit in the Bus (0) | 2025.01.19 |
---|---|
110. Product Price at a Given Date (0) | 2025.01.18 |
112. Count Salary Categories (0) | 2025.01.16 |
108. Triangle Judgement (0) | 2025.01.15 |
106. The Number of Employees Which Report to Each Employee (0) | 2025.01.14 |