susinlee 님의 블로그
114. Exchange Seats 본문
[문제]
https://leetcode.com/problems/exchange-seats/description/
[풀이]
1번과 2번 자리를 바꾸고, 3번과 4번 자리를 바꾸면서 마지막 좌석이 홀수이면 그대로 유지
학생을 한칸씩 뒤로 이동시킨 컬럼(lag)과 한칸씩 앞으로 이동시킨 컬럼(lead)을 생성
id가 홀수라면 lead 컬럼을, id가 짝수라면 lag 컬럼을 선택
만약, 마지막 좌석이 홀수라면 이동할 필요가 없으므로 원래값을 유지시켜준다
Pandas
import pandas as pd
def exchange_seats(seat: pd.DataFrame) -> pd.DataFrame:
seat['lag'] = seat['student'].shift(1)
seat['lead'] = seat['student'].shift(-1)
seat['student'] = seat.apply(lambda x: x.lead if x.id % 2 else x.lag, axis=1).fillna(seat['student'])
return seat[['id', 'student']].sort_values('id')
SQL
# 1번 방법
SELECT
ROW_NUMBER() OVER() AS id
, student
FROM Seat
ORDER BY
IF(MOD(id, 2)=0, id-1, id+1)
# 2번 방법
SELECT
id
, IFNULL(IF(id % 2 = 0, lag_col, lead_col), student) AS student
FROM
(
SELECT
*
, LEAD(student) OVER() AS lead_col
, LAG(student) OVER() AS lag_col
FROM Seat
) sub1
ORDER BY id
'코드카타 > Pandas' 카테고리의 다른 글
115. Movie Rating (0) | 2025.01.30 |
---|---|
113. (0) | 2025.01.20 |
111. Last Person to Fit in the Bus (0) | 2025.01.19 |
110. Product Price at a Given Date (0) | 2025.01.18 |
109. Consecutive Numbers (0) | 2025.01.17 |