코딩 테스트/MySQL

[HackerRank] Ollivander's Inventory

알밤바 2025. 7. 29. 12:47
728x90
반응형
 

Ollivander's Inventory | HackerRank

Help pick out Ron's new wand.

www.hackerrank.com


문제

 

문제 접근 방식

문제에서 말한 조건은 다음과 같다

- EVIL이 아닌 지팡이

- POWER 기준 내림차순, 같은 POWER일 경우 AGE 기준 내림차순

- 지팡이 구입 시 최소한의 필요 코인 출력

 

 

1) EVIL이 아닌 지팡이

WHERE 조건절 활용

 

2) POWER 기준 내림차순, 같은 POWER일 경우 AGE 기준 내림차순

ORDER BY 절 활용

 

3) 지팡이 구입 시 최소한의 필요 코인 출력

조인절을 활용해서, (POWER, AGE) 기준으로 COINS_NEEDED의 최솟값을 구한 다음, 기존 테이블과 조인하여

    조인 조건절에 COINS_NEEDED와 최솟값이 같다는 조건을 추가하면 된다.

 

사실 여기서 가장 애먹었는데, 나는 MIN() OVER() 함수를 활용하여 COINS_NEEDED의 최솟값을 구하려고 했으나, 현 해커랭크 버전에서 이 윈도우 함수를 지원하지 않아서 다른 방식으로 쿼리를 작성함!

SELECT A1.ID
     , A2.AGE
     , A1.COINS_NEEDED
     , A1.POWER
FROM WANDS A1
INNER JOIN WANDS_PROPERTY A2
    ON A1.CODE = A2.CODE
INNER JOIN (
    SELECT B1.POWER, B2.AGE, MIN(B1.COINS_NEEDED) AS MIN_COINS
    FROM WANDS B1
    INNER JOIN WANDS_PROPERTY B2
        ON B1.CODE = B2.CODE
    WHERE B2.IS_EVIL = 0
    GROUP BY B1.POWER, B2.AGE
) A3
    ON A1.POWER = A3.POWER
    AND A2.AGE = A3.AGE
    AND A1.COINS_NEEDED = A3.MIN_COINS
WHERE A2.IS_EVIL = 0
ORDER BY A1.POWER DESC, A2.AGE DESC
;
728x90
반응형

'코딩 테스트 > MySQL' 카테고리의 다른 글

[HackerRank] Challenges  (2) 2025.08.05
[HackerRank] The PADS  (2) 2025.07.30
[HackerRank] Top Competitors  (2) 2025.07.28
[HackerRank] The Report  (0) 2025.07.25
[HackerRank] Weather Observation Station 20  (0) 2025.07.24