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
'Algorithm > leetCode' 카테고리의 다른 글
[세무민의 코딩일기] LeetCode Trips and Users 문제풀이 (0) | 2022.01.17 |
---|---|
[세무민의 코딩일기] LeetCode Rising Temperature문제풀이 (0) | 2022.01.13 |
[세무민의 코딩일기] LeetCode Duplicate Emails 문제풀이 (0) | 2022.01.11 |
[세무민의 코딩일기] LeetCode Second Highest Salary 문제풀이 (0) | 2022.01.09 |
[세무민의 코딩일기] LeetCode Nth Highest Salary 문제풀이 (0) | 2022.01.08 |