🔗 1. 문제 URL
프로그래머스 문제 바로가기 👉
https://school.programmers.co.kr/learn/courses/30/lessons/284531#qna
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 2. 문제 요구사항 정리
이 문제는 ITEM_INFO 테이블과 ITEM_TREE 테이블을 이용해
희귀도(RARITY)가 RARE인 아이템들의 다음 업그레이드 아이템을 조회하는 문제입니다.
문제의 핵심은 다음과 같습니다.
✔ 요구사항 요약
- 희귀도가 RARE인 아이템들의 ITEM_ID 목록을 구합니다.
- ITEM_TREE에서 PARENT_ITEM_ID가 이 목록에 속하는 행을 찾습니다.
→ 이 행들이 바로 “다음 업그레이드 아이템(자식 아이템)”입니다. - 자식 아이템의
- ITEM_ID
- ITEM_NAME
- RARITY
를 조회합니다.
- 결과는 ITEM_ID 기준 내림차순 정렬합니다.
✅ 3. 정답 SQL 코드
SELECT T.ITEM_ID, I.ITEM_NAME, I.RARITY
FROM ITEM_INFO I JOIN ITEM_TREE T
ON I.ITEM_ID = T.ITEM_ID
WHERE T.PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
ORDER BY T.ITEM_ID DESC;
💡 4. 풀이하면서 느낀 점
처음 문제를 읽었을 때는 업그레이드 구조가 층층이 이어지는 것처럼 보였기 때문에
여러 단계를 추적해야 하는 문제인지 혼란스러웠습니다.
하지만 다시 문제 조건을 정리해보니,
실제 요구되는 작업은 희귀도 RARE인 아이템의 ‘직계 자식 아이템’만 찾는 것이라는 점이 명확했습니다.
특히 WHERE절을 어떻게 작성해야 할지 처음에는 이해하기 어려웠습니다.
WHERE T.PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
이 조건의 의미는 다음과 같습니다.
“부모가 RARE인 아이템들만 조회한다.”
즉,
- 먼저 RARE 아이템들의 ITEM_ID 목록을 만들고
- 그 ID를 부모로 가진 자식 아이템을 필터링하는 방식입니다.
서브쿼리에서 RARE 아이템의 ID 목록을 구하고,
그 ID를 부모로 가지는 자식 노드를 찾아내는 구조라는 점을 이해하니,
문제 전체의 흐름이 정리되고 업그레이드 관계를 SQL로 어떻게 연결해야 하는지 더 명확하게 파악할 수 있었습니다.
궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.
도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊
'코딩테스트 > MYSQL' 카테고리의 다른 글
| [프로그래머스 LV.2] 성분으로 구분한 아이스크림 총 주문량 — MySQL 정답 & 해설 (0) | 2025.12.01 |
|---|---|
| [프로그래머스 LV.2] 조건에 맞는 도서와 저자 리스트 출력하기 — MySQL 정답 & 해설 (3) | 2025.11.29 |
| [프로그래머스 LV.2] 조건에 맞는 사원 정보 조회하기 — MySQL 정답 & 해설 (0) | 2025.11.29 |
| [프로그래머스 LV.2] ROOT 아이템 구하기 — MySQL 정답 & 해설 (0) | 2025.11.27 |
| [프로그래머스 LV.2] 노선별 평균 역 사이 거리 조회하기 — MySQL 정답 & 해설 (0) | 2025.11.20 |