[해커랭크]Ollivander's Inventory

김준석·2024년 1월 25일

코딩테스트 - SQL

목록 보기
33/96

문제

https://www.hackerrank.com/challenges/harry-potter-and-wands/problem?isFullScreen=true
해르미온느가 지팡이 고르는 걸 도와주는 문제
힘DESC, 나이DESC, 가격 제일 낮은 것을 제시해 줘야 됨.

풀이

SELECT w.id, wp.age, w.coins_needed, w.power
FROM Wands w 
    INNER JOIN Wands_Property wp
    ON w.code = wp.code

WHERE 1=1
AND (wp.age,w.power,w.coins_needed) IN (
        SELECT wp1.age, w1.power, MIN(w1.coins_needed) 
        FROM Wands w1
        INNER JOIN Wands_Property wp1
        ON w1.code = wp1.code
        WHERE 1=1
        AND wp1.is_evil=0
        GROUP BY wp1.age, w1.power
        )
ORDER BY 
    w.power DESC,
    wp.age DESC

후기

아놔 ㅠㅠㅠ해커랭커 CTE 안되는거 깜빡하고 CTE로 풀고 있었다 ... 쉬방

WIHT choice AS(
    SELECT 
        w.id,
        wp.age,
        w.coins_needed,
        w.power,
        ROW_NUMBER() OVER(PARTITION BY wp.age, w.power ORDER BY w.coins_needed) AS rank
    FROM Wands w
        INNER JOIN Wands_Property wp
        ON w.code=wp.code
    WHERE 1=1
    AND wp.is_evil = 0
)
SELECT id, age, coins_needed, power
FROM choice
WHERE 1=1
    AND rank = 1
ORDER BY
    power DESC,
    age DESC

이후 나는 서브쿼리를 사용하여 진행했다.
IN 연산자를 이용해 서브쿼리에서 나오는 값들을 필터링함.

나중에 문제를 풀 때는 아래처럼 문제를 정리해보는 습관을 갖어보자.

non_evil인 지팡이에서 같은 나이, 같은 힘을 가진 지팡이들 중에서 가장 저렴한 지팡이를 출력하시오. 출력을 할 때는 지팡이의 힘으로 내림차순 정렬을 하고, 힘을 같을 시에는 나이를 내림차순 정렬을 하시오.

0개의 댓글