본문 바로가기
TIL - 프로그래밍/SQL

[리트코드] 626. Exchange Seats - MySQL

by chaemj97 2023. 7. 15.
728x90

https://leetcode.com/problems/exchange-seats/

 

Exchange Seats - LeetCode

Can you solve this real interview question? Exchange Seats - Table: Seat +-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | student | varchar | +-------------+---------+ id is the primary key column for this table. Ea

leetcode.com


  • 문제
    • 홀수번째 아이와 짝수번째 아이의 자리 바꾸기
    • 마지막 아이가 홀수번째인 경우 그대로 두기

  • 풀이
    • 학생이 짝수명인 경우
      • Id가 홀수인 학생들은 Id + 1
      • Id가 짝수인 학생들은 Id - 1
    • 학생이 홀수명인 경우
      • 마지막 학생!!! Id
      • 마지막 학생을 제외한 Id가 홀수인 학생들은 Id + 1
      • Id가 짝수인 학생들은 Id - 1

학생이 짝수명인 경우

SELECT CASE
            -- ID가 홀수인 경우
            WHEN MOD(ID,2) = 1 THEN ID + 1
            -- ID가 짝수인 경우
            ELSE ID - 1
        END AS NEW_ID
        , ID
        , STUDENT
FROM SEAT;

 

학생 수가 홀수명인 경우는 마지막 학생만 따로 처리해주면 된다.

마지막 학생인지 알기 위해서 ID가 전체 학생수랑 같은지 확인하자

  • 코드
SELECT CASE
            -- 학생이 홀수명인 경우 마지막 학생
            WHEN MOD(ID,2) = 1 AND ID = TOTAL_ROWS THEN ID
            -- ID가 홀수인 학생
            WHEN MOD(ID,2) = 1 THEN ID + 1
            -- ID가 짝수인 학생
            ELSE ID -1
        END ID
        , STUDENT
FROM (SELECT ID
            , STUDENT
            -- 전체 학생 수
            , COUNT(*) OVER () AS TOTAL_ROWS
    FROM SEAT) T
ORDER BY ID;

CASE문의 첫번째 조건에 ID = TOTAL_ROWS만 적을 경우 학생이 짝수명일 때 오류가 남!!

728x90
반응형

댓글