해커랭크 [Ollivander's Inventory]

윤태영·2024년 8월 27일
0

문제

https://www.hackerrank.com/challenges/harry-potter-and-wands/problem?isFullScreen=false

해리포터와 친구들은 찰리의 오래되고 부서진 지팡이를 교체하기 위해 론과 올리벤더 지팡이 가게를 방문했다. 헤르미온느는 지팡이를 고르는 최선의 방법으로서 non-evil 지팡이이면서 높은 power와 Age 특성을 갖는 지팡이를 사기 위해 필요한 최소한의 돈(gold galleons)을 고르는 방법을 제안했다. 이 방법을 적용했을 때, 론이 관심있어 할만한 지팡이의 id, age, coins_needed, power 값들을 출력해라. 이 때 1차적으로 정렬 기준은 power기준으로 내림차순 정렬하며, 동일한 power값이 있을때는 age값을 기준으로 내림차순 정렬해라.

INPUT FORMAT

TABLE NAME : Wands

  • id는 지팡이의 id, code는 지팡이의 코드, coin_need는 지팡이를 사는 데 필요한 금갈레온의 총 개수이며, power는 지팡이의 품질을 나타냅니다(파워가 높을수록 지팡이가 더 좋습니다).

TABLE NAME : Wands_Property

  • 코드는 지팡이의 코드이고, 나이는 지팡이의 나이이며, is_evil은 지팡이가 암술에 좋은지 여부를 나타냅니다. is_evil의 값이 0이라면, 이 지팡이는 악하지 않다는 것을 의미합니다. 코드와 나이의 관계는 일대일인데, 이는 만약 두 쌍이 있다면, (code1, age1) and (code2, age2)를 의미합니다

SAMPLE INPUT

Sample Output

문제풀이

  1. is_evil = 0값인 non-evil지팡이들만 고르자.
  2. Age, Power값이 각각 같은 지팡이들 중에서 coins_needed값을 최소로 하는 지팡이를 골라야 한다.
  3. 2개의 정렬 기준을 만족시켜야 한다.
  • 서브쿼리를 작성할때 메인 쿼리에서 활용한 테이블의 컬럼을 참고 할 수 있다.

쿼리

SELECT A.id, B.age, A.coins_needed, A.power
FROM Wands A
INNER JOIN Wands_Property B ON A.code = B.code
WHERE B.is_evil = 0
AND A.coins_needed = (

    SELECT MIN(W1.coins_needed)
    FROM Wands W1
    INNER JOIN Wands_Property P1 ON W1.code = P1.code
    WHERE P1.is_evil = 0 
    AND W1.power = A.power AND P1.age = B.age
)
ORDER BY A.power DESC, B.age DESC;
profile
ice blue

0개의 댓글