

문제를 보고 논리적 구조는 어느정도 잡았다.
각 해커가 만든 챌린지의 갯수를 구하고 -> 조건에 맞는 챌린지 갯수에 해당하는 해커 ID를 구하고 -> 테이블에 조인한 다음 출력을 구하자
그런데
" If more than one student created the same number of challenges and the count is less than the maximum number of challenges created, then exclude those students from the result."
이 문구가 난이도를 확 올리는 주범이었다. 논리적 구조로는 COUNT, MAX 이 정도지만 이걸 구현하기 위한 서브쿼리들이 이중, 삼중으로 들어가다보니 복잡하게 느껴졌다. 아직 BASIC인데..
결과를 놓고 보니 좀더 최적화 할 수 있지 않을까 했지만, 멀쩡히 돌아가는건 두는게 맞을거 같다.
제출 쿼리
SELECT A.hacker_id, A.name, A.number
FROM (SELECT H.hacker_id, H.name, COUNT(challenge_id) AS number
FROM HACKERS H
JOIN CHALLENGES C ON H.hacker_id = C.hacker_id
GROUP BY H.hacker_id, H.name) AS A
JOIN (SELECT number
FROM (SELECT H.hacker_id, H.name, COUNT(challenge_id) AS number
FROM HACKERS H
JOIN CHALLENGES C ON H.hacker_id = C.hacker_id
GROUP BY H.hacker_id, H.name) AS T
GROUP BY number
HAVING COUNT(hacker_id) = 1
OR number = (SELECT MAX(CC)
FROM (SELECT COUNT(challenge_id) AS CC
FROM CHALLENGES
GROUP BY hacker_id) AS HC
)
) AS B
ON A.number = B.number
ORDER BY A.number DESC, A.hacker_id
'해커랭크 문제풀이' 카테고리의 다른 글
| 해커랭크 Wands 문제 (0) | 2025.09.02 |
|---|