susinlee 님의 블로그

114. Exchange Seats 본문

코드카타/Pandas

114. Exchange Seats

susinlee 2025. 1. 30. 09:35

[문제]

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