[LeetCode-SQL 50] 626. Exchange Seats

코린이·2025년 6월 14일

SQL 문제 풀이 (MySQL)

목록 보기
84/96

❓ 문제

Seat
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| student     | varchar |
+-------------+---------+

ID는 이 테이블의 기본 키(고유 값) 열입니다.
이 표의 각 행은 학생의 이름과 ID를 나타냅니다.
ID 시퀀스는 항상 1에서 시작하여 계속 증가합니다.

연속되는 두 학생의 좌석 ID를 모두 교체하는 솔루션을 작성합니다. 학생 수가 홀수인 경우 마지막 학생의 ID는 교환되지 않습니다.

아이디를 오름차순으로 정렬한 결과 테이블을 반환합니다.

자세한 문제 내용은 사이트 참고...


❗️ 문제 풀이

with tmp_tb as (
    select
        id
        , student
        , lag(student, 1) over(order by id) as lag_student      -- 한 칸씩 앞으로 땡김
        , lead(student, 1) over(order by id) as lead_student    -- 한 칸씩 뒤로 땡김
    FROM Seat
)
select
    id
    , case 
        when id%2 = 1 and id = (select max(id) from Seat) then student  -- 홀수 중 마지막 ID 사람은 변경X
        when id%2 = 0 then lag_student    -- 짝수 사람은 홀수 사람의 ID 사용
        when id%2 = 1 then lead_student   -- 홀수 사람은 짝수 사람의 ID 사용
    end as student
from tmp_tb
group by id
;

🔗 Reference

https://leetcode.com/problems/exchange-seats/description/?envType=study-plan-v2&envId=top-sql-50

0개의 댓글