해커랭크 문제풀이

해커랭크 Challenges 문제

swhwang0610 2025. 9. 3. 15:14

 

 

 

 

문제를 보고 논리적 구조는 어느정도 잡았다.

 

각 해커가 만든 챌린지의 갯수를 구하고 -> 조건에 맞는 챌린지 갯수에 해당하는 해커 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