본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] Leet code - Exchange Seats

by kime2 2024. 7. 31.
출처

 

문제

두 명의 연속된 학생마다 좌석 ID를 바꾸는 솔루션을 작성합니다. 학생 수가 홀수인 경우 마지막 학생의 ID가 바뀌지 않습니다.

문제에 대한 해석

마지막 번호가 홀수인 5번 학생을 제외하고 1번 2번이 바뀌었다

 

풀이(MYSQL)

with base as (
    select id, 
    case when (select max(id) from Seat) = id and id % 2  > 0 then id
    -- 마지막 아이디가 홀수라면 그냥 id를 출력하고 그 외
    when id % 2 = 0 then id-1 -- 아이디가 짝수이면 이전번호를
    else id+1 end as'swap' -- 아니면(홀수이면) 이후 번호를
    from Seat
)
select a.swap as 'id', b.student
from base a join Seat b
on a.id = b.id
order by 1

 

select id,
    case when id%2 =0 then lag(student) over(order by id)
    -- id가 짝수라면 이전행의 이름을 가져와라(id순으로)
    else ifnull(lead(student) over(order by id),student)
    -- id가 홀수라면 다음행의 이름을 가져와라(마지막 행이라서 다음행을 가져올 수 없어 null값이라면 그냥 이름을 출력)
    end as 'student'
from Seat