본문 바로가기
SQL/MySQL

[MySQL] HackerRank - Ollivander's Inventory 문제 풀이

by 취준생 져니 2025. 3. 26.

문제 사이트

아래 문제는 해커랭크에서 추출해온 문제입니다. 문제의 저작권은 해커랭크에 있으며 문제를 풀어보시려면 아래 링크를 클릭해주세요 🙂

 

Ollivander's Inventory | HackerRank

Help pick out Ron's new wand.

www.hackerrank.com

 

 

 

 

 

 

👉문제 설명

  • Non-evil의 지팡이를 구매
  • power, age 별 coins_needed가 최소인 행
  • 힘과 나이 순서대로 내림차순 정렬

 

 

 

 

 

👉문제 풀이 과정

1. Non-evil이면서 power, age별 가장 낮은 coins_needed 찾기

SELECT w2.power, wp2.age, MIN(w2.coins_needed) AS min_coins
    FROM Wands w2
    JOIN Wands_Property wp2 ON w2.code = wp2.code
    WHERE wp2.is_evil = 0
    GROUP BY w2.power, wp2.age
) AS min_wands

 

- 조건에 해당하는 행 중에서 가장 낮은 값을 찾아야 하므로 서브쿼리와 join 활용해야 함!

 

power, age 별 최저 coins_needed가 출력됨

 

 

 

2. id 값도 함께 나올 수 있도록 join

SELECT w.id, wp.age, w.coins_needed, w.power
FROM Wands w
JOIN Wands_Property wp ON w.code = wp.code
JOIN (
    SELECT w2.power, wp2.age, MIN(w2.coins_needed) AS min_coins
    FROM Wands w2
    JOIN Wands_Property wp2 ON w2.code = wp2.code
    WHERE wp2.is_evil = 0
    GROUP BY w2.power, wp2.age
) AS min_wands ON w.power = min_wands.power
              AND wp.age = min_wands.age
              AND w.coins_needed = min_wands.min_coins
WHERE wp.is_evil = 0

 

 

 

 

 

3. 정렬 조건

ORDER BY w.power DESC, wp.age DESC

 

 

 

👉최종 답안 

SELECT w.id, wp.age, w.coins_needed, w.power
FROM Wands w
JOIN Wands_Property wp ON w.code = wp.code
JOIN (
    SELECT w2.power, wp2.age, MIN(w2.coins_needed) AS min_coins
    FROM Wands w2
    JOIN Wands_Property wp2 ON w2.code = wp2.code
    WHERE wp2.is_evil = 0
    GROUP BY w2.power, wp2.age
) AS min_wands ON w.power = min_wands.power
              AND wp.age = min_wands.age
              AND w.coins_needed = min_wands.min_coins
WHERE wp.is_evil = 0
ORDER BY w.power DESC, wp.age DESC;

 

 

 

 

👉고찰

서브쿼리 사용하는 방법에 대해 좀 더 공부해야 할 거 같다

언제 서브쿼리를 사용해야 하고 어떻게 써야 하는지 잘 모르는 거 같음