본문 바로가기
HackerRank

Top Competitors(SQL)

by Doromi 2023. 10. 20.
728x90
반응형
문제 배경:

HackerRank에서는 여러 해커들이 여러 챌린지에 참여하고, 이들은 각각의 챌린지에 대한 점수를 획득합니다. 각 챌린지는 특정 난이도 레벨에 속하며, 해당 난이도에 따른 최대 점수가 있습니다.

문제 목표:

모든 챌린지에 대해 그 챌린지의 난이도에 따른 최대 점수를 얻은 해커들의 목록을 찾아야 합니다.
이러한 해커들 중에서 두 개 이상의 챌린지에서 최대 점수를 얻은 해커들만을 대상으로 합니다.
결과는 두 개 이상의 챌린지에서 최대 점수를 얻은 횟수로 내림차순 정렬되어야 합니다.
만약 동일한 횟수의 챌린지에서 최대 점수를 얻은 해커들이 여러 명이라면, 그들의 hacker_id로 오름차순 정렬됩니다.

데이터 구조:

Hackers: 해커들의 정보를 포함하며, hacker_id와 name 필드를 포함합니다.
Submissions: 제출들의 정보를 포함하며, hacker_id, challenge_id, 그리고 score 필드를 포함합니다.
Challenges: 챌린지들의 정보를 포함하며, challenge_id와 difficulty_level 필드를 포함합니다.
Difficulty: 각 난이도 레벨에 따른 점수 정보를 포함하며, difficulty_level과 score 필드를 포함합니다.

제공된 쿼리의 분석:

Submissions, Challenges, Difficulty, 그리고 Hackers 테이블을 조인하여 관련 정보를 추출합니다.
조인 조건은 챌린지 ID, 난이도 레벨, 해커 ID 등을 기반으로 합니다.
WHERE 조건을 사용하여 제출된 점수가 해당 난이도에서 가능한 최대 점수와 일치하는 경우만 필터링합니다.
GROUP BY와 HAVING을 사용하여 두 개 이상의 챌린지에서 최대 점수를 얻은 해커들만을 선택합니다.
ORDER BY를 사용하여 결과를 필요한 순서대로 정렬합니다.
이렇게 "Top Competitors" 문제는 HackerRank 플랫폼에서 여러 챌린지에 참여한 해커들 중에서 특정 조건을 만족하는 해커들만을 필터링하고 그 결과를 특정 순서로 정렬하는 것에 중점을 둔 문제입니다.

 

SELECT H.hacker_id,H.name
FROM Submissions S
INNER JOIN Challenges C ON S.challenge_id=C.challenge_id
INNER JOIN Difficulty D ON C.difficulty_level=D.difficulty_level
INNER JOIN Hackers H ON S.hacker_id=H.hacker_id
WHERE S.score=D.score and C.difficulty_level=D.difficulty_level
GROUP BY H.hacker_id,H.name
HAVING COUNT(H.hacker_id)>1
ORDER BY COUNT(H.hacker_id) DESC,H.hacker_id;
728x90
반응형

'HackerRank' 카테고리의 다른 글

isTreeSymmetric  (0) 2024.04.05
hasPathWithGivenSum  (0) 2024.04.02
The Report(SQL)  (0) 2023.10.19
Average Population of Each Continent(SQL)  (0) 2023.10.19
African Cities(SQL)  (2) 2023.10.17