[level 2] 업그레이드 된 아이템 구하기 - 273711
성능 요약
메모리: undefined, 시간:
구분
코딩테스트 연습 > SELECT
채점결과
합계: 100.0 / 100.0
제출 일자
2024년 2월 6일 13:24:0
문제 설명
Expand Down
어느 한 게임에서 사용되는 아이템들은 업그레이드가 가능합니다.
'ITEM_A'->'ITEM_B'와 같이 업그레이드가 가능할 때
'ITEM_A'를 'ITEM_B' 의 PARENT 아이템,
PARENT 아이템이 없는 아이템을 ROOT 아이템이라고 합니다.
예를 들어 'ITEM_A'->'ITEM_B'->'ITEM_C'와 같이 업그레이드가 가능한 아이템이 있다면
'ITEM_C'의 PARENT 아이템은 'ITEM_B'
'ITEM_B'의 PARENT 아이템은 'ITEM_A'
ROOT 아이템은 'ITEM_A'가 됩니다.
다음은 해당 게임에서 사용되는 아이템 정보를 담은 ITEM_INFO
테이블과 아이템 관계를 나타낸 ITEM_TREE
테이블입니다. ITEM_INFO
테이블은 다음과 같으며, ITEM_ID
, ITEM_NAME
, RARITY
, PRICE
는 각각 아이템 ID, 아이템 명, 아이템의 희귀도, 아이템의 가격을 나타냅니다.
Column name | Type | Nullable |
---|---|---|
ITEM_ID | INTEGER | FALSE |
ITEM_NAME | VARCHAR(N) | FALSE |
RARITY | INTEGER | FALSE |
PRICE | INTEGER | FALSE |
ITEM_TREE
테이블은 다음과 같으며, ITEM_ID
, PARENT_ITEM_ID
는 각각 아이템 ID, PARENT 아이템의 ID를 나타냅니다.
Column name | Type | Nullable |
---|---|---|
ITEM_ID | INTEGER | FALSE |
PARENT_ITEM_ID | INTEGER | TRUE |
단, 각 아이템들은 오직 하나의 PARENT 아이템 ID를 가지며, ROOT 아이템의 PARENT 아이템 ID는 NULL 입니다.
ROOT 아이템이 없는 경우는 존재하지 않습니다.
문제
아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.
예시
예를 들어 ITEM_INFO
테이블이 다음과 같고
ITEM_ID | ITEM_NAME | RARITY | PRICE |
---|---|---|---|
0 | ITEM_A | RARE | 10000 |
1 | ITEM_B | RARE | 9000 |
2 | ITEM_C | LEGEND | 11000 |
3 | ITEM_D | RARE | 10000 |
4 | ITEM_E | RARE | 12000 |
ITEM_TREE
테이블이 다음과 같다면
ITEM_ID | PARENT_ITEM_ID |
---|---|
0 | NULL |
1 | 0 |
2 | 0 |
3 | 1 |
4 | 1 |
아이템의 희귀도가 'RARE'인 아이템은 'ITEM_A', 'ITEM_B', 'ITEM_D', 'ITEM_E' 입니다.
이 중 'ITEM_A' 는 'ITEM_B', 'ITEM_C' 로 업그레이드가 가능하며 'ITEM_B' 는 'ITEM_D' , 'ITEM_E' 로 업그레이드가 가능합니다. 'ITEM_D' 와 'ITEM_E'는 더 이상 업그레이드가 가능하지 않습니다. 따라서 결과는 다음과 같이 나와야 합니다.
ITEM_ID | ITEM_NAME | RARITY |
---|---|---|
4 | ITEM_E | RARE |
3 | ITEM_D | RARE |
2 | ITEM_C | LEGEND |
1 | ITEM_B | RARE |
※ 참고: 본 문제는 제출 내역 확인 기능을 지원하지 않습니다.
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
풀이
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_TREE
WHERE PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY="RARE"
)
)
ORDER BY ITEM_ID DESC;
문제를 읽어보면 등급이 레어인 부모 아이템의 아이디에 맞는 자식 아이템의 아이디, 이름, 등급을 조회하는 문제이다.
그래서 2개의 서브쿼리를 사용하여 문제를 해결하였다.
또 JOIN을 이용해서 문제를 해결해보고 싶어서 시도했다.
SELECT C.ITEM_ID, C.ITEM_NAME, C.RARITY
FROM
ITEM_INFO C
JOIN ITEM_TREE B
ON C.ITEM_ID=B.ITEM_ID
JOIN ITEM_INFO A
ON B.PARENT_ITEM_ID=A.ITEM_ID
WHERE A.RARITY="RARE"
ORDER BY ITEM_ID DESC;
'코딩테스트 > SQL' 카테고리의 다른 글
저자 별 카테고리 별 매출액 집계하기 - 144856 (0) | 2024.02.20 |
---|---|
조건에 맞는 회원수 구하기 - 131535 (0) | 2024.02.17 |
재구매가 일어난 상품과 회원 리스트 구하기 - 131536 (0) | 2024.02.16 |
조건에 부합하는 중고거래 댓글 조회하기 - 164673 (0) | 2024.02.15 |
서울에 위치한 식당 목록 출력하기 - 131118 (1) | 2024.02.15 |