728x90
https://leetcode.com/problems/exchange-seats/
- 문제
- 홀수번째 아이와 짝수번째 아이의 자리 바꾸기
- 마지막 아이가 홀수번째인 경우 그대로 두기
- 풀이
- 학생이 짝수명인 경우
- 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
반응형
'TIL - 프로그래밍 > SQL' 카테고리의 다른 글
[프로그래머스] LV3. 물고기 종류 별 대어 찾기 - MySQL (0) | 2024.05.28 |
---|---|
[프로그래머스] LV2. 물고기 종류 별 잡은 수 구하기 - MySQL (0) | 2024.05.20 |
[리트코드] 262. Trips and Users - MySQL (0) | 2023.07.15 |
[해커랭크] Weather Observation Station 20 - MySQL (0) | 2023.07.15 |
[해커랭크] Ollivander's Inventory - MySQL (0) | 2023.07.14 |
댓글