Algorithm/leetCode

[세무민의 코딩일기] LeetCode Exchange Seats 문제풀이

세기루민 2022. 2. 11. 00:17
728x90

오늘 풀어볼 문제는 LeetCode의 Exchange Seats 문제입니다. 

 

1. 문제 및 예시

 

2. 문제풀이

 

이번 문제는 앞뒤로 바꾸는 쿼리 결과를 조회하면된다.

그렇다면 곰곰히 생각해보면 2의 배수의 경우는 앞뒤로 변경이 가능하지만

2의 배수에서 -1인 경우는 마지막의 값은 변경이 불가능하다.

이 말은 즉슨 Mod(ID, 2) = 1 공식에 따라서 문제를 풀면 된다. 

 

3. 코드
/**
* LeetCode : Exchange Seats
* URL :https://leetcode.com/problems/exchange-seats/
*/

SELECT ID,
IFNULL(CASE WHEN MOD(ID, 2) != 0 THEN LEAD(student) over()
                          ELSE LAG(student) over()
                          END , student) as student
                          FROM SEAT;

여기서 LEAD와 LAG에 대해서 간단히 설명하고 가자면 

LAG는 이전행의 값, LEAD는 다음행의 값을 출력해준다. 

따라서 MOD(ID, 2) = 1 인 경우 다음행의 값을, MOD(ID,2) = 0 인경우는 이전값을 출력해주면 되는데 

이렇게 돌다보면 짝이 없는 경우는 NULL로 출력될 것이다. 

따라서 IFNULL을 이용하여 NULL값인 경우는 기존의 값을 출력해주면 된다. 

 

4. 결과


이번에는 LeetCode에서 Exchange Seats 문제를 풀어봤습니다. 

다음에는 더 유익한 포스팅으로 찾아오겠습니다. 

728x90