노력에는 지름길이 없으니까요

LeetCode - 626. Exchange Seats 본문

SQL/LeetCode

LeetCode - 626. Exchange Seats

데건 2024. 8. 16. 16:30
728x90

 

해결일 언어 레벨 테스트명
20240816 SQL medium  626. Exchange Seats

 

링크 : https://leetcode.com/problems/exchange-seats/description/

 

 

 


 

내 코드

-- 1) 전체 레코드 수가 홀수일 때 마지막 데이터는 바꾸지 않아도 됨
--    -> id가 레코드 개수와 같을 때 
-- 2) id가 홀수일 때 +1, id가 짝수일 때 -1 에 있는 데이터 출력

-- SELECT
--     CASE
--     WHEN MOD(id,2)=0 THEN id-1
--     WHEN ((MOD(id,2)=1) AND (id+1 != MAX(id))) THEN id+1
--     ELSE id END id
--     ,student
-- FROM Seat
-- ORDER BY id asc
-- 처음에 실수한 코드

SELECT
       CASE 
        WHEN MOD(id, 2) = 1 AND id + 1 <= (SELECT MAX(id) FROM Seat)
        THEN id + 1
        WHEN MOD(id, 2) = 0
        THEN id - 1
        ELSE id
    END AS id
    ,student
FROM Seat
ORDER BY id asc

 

주의해야 할 점이 늘어나는 것이 난이도와 관련이 있는 듯 하다.

고려해야 할 점이 두 개 있었는데,

1) 전체 레코드 수가 홀수일 때 마지막 데이터는 바꾸지 않아도 됨 -> id가 레코드 개수와 같을 때

2) id가 홀수일 때 +1, id가 짝수일 때 -1 에 있는 데이터 출력

 

홀수 짝수에 해당하는 when문을 기재하되, 마지막 레코드에 대해서는 처리를 하지 않도록 조건을 나누었다.

 

 

개선점:

MAX의 사용법을 또 간과하고 있다가 튜터님께 질문해서 풀어냈다...

 

추가로 받은 힌트

- 변한 것이 student 즉 문자열처럼 보이지만, id를 바꾸어도 상관없다.

그리고 숫자를 사용할 때 더 간편하게 풀 수 있는 방법이 많다. (max 사용 등... 함수 대응이 간편해짐)

 

 

 

728x90
반응형