코딩 테스트/MySQL

[HackerRank] Top Competitors

알밤바 2025. 7. 28. 10:31
728x90
반응형
 

Top Competitors | HackerRank

Query a list of top-scoring hackers.

www.hackerrank.com


문제

 

문제 접근 방식

2개 이상의 챌린지에서 만점을 받은 hacker의 id와 name을 출력하는 문제이다.

만점을 받은 hacker가 여러 명 있을 경우, 만점을 받은 총 챌린지 수 기준 내림차순이며

만점을 받은 총 챌린지 수가 동일하면 hacker_id 기준 오름차순 정렬을 해야 한다.

 

2개 이상의 챌린지에서 만점 받은 hacker를 조건절을 통해 거르고

문제에서 요구한 정렬을 하면 된다.

 

where 절과 having 절을 활용하여 조건을 걸고 order by 절을 통해 정렬하여 쿼리를 구성하면 된다.

 

1) SUBMISSIONS 테이블을 기준으로 연관된 컬럼끼리 조인

    → 실제 점수와 챌린지의 레벨 별 최고 점수를 비교해야 하므로 이것을 고려해서 조인 필요

2) 실제 점수와 레벨 별 최고 점수가 같은 hacker만 출력하도록 where 조건절에 추가

3) 2개 이상의 챌린지에서 만점 받은 hacker는 having절을 통해 조건 추가

4) 문제에서 요구한 정렬을 order by절에 추가 (집계식 활용 가능)

SELECT A2.HACKER_ID, A2.NAME
FROM SUBMISSIONS A1
INNER JOIN HACKERS A2
    ON A1.HACKER_ID = A2.HACKER_ID
INNER JOIN CHALLENGES A3
    ON A1.CHALLENGE_ID = A3.CHALLENGE_ID
INNER JOIN DIFFICULTY A4
    ON A3.DIFFICULTY_LEVEL = A4.DIFFICULTY_LEVEL
WHERE A1.SCORE= A4.SCORE
GROUP BY A2.HACKER_ID, A2.NAME
HAVING COUNT(A1.CHALLENGE_ID) >= 2
ORDER BY COUNT(A1.CHALLENGE_ID) DESC, A2.HACKER_ID
;
728x90
반응형

'코딩 테스트 > MySQL' 카테고리의 다른 글

[HackerRank] The PADS  (2) 2025.07.30
[HackerRank] Ollivander's Inventory  (2) 2025.07.29
[HackerRank] The Report  (0) 2025.07.25
[HackerRank] Weather Observation Station 20  (0) 2025.07.24
[HackerRank] New Companies  (0) 2025.07.22