해커랭크 [Top Competitors]

윤태영·2024년 8월 27일
0

문제

https://www.hackerrank.com/challenges/full-score/problem

줄리아는 코딩대회를 마쳤고 참가자들의 점수 리더보드를 만드려고 한다. 2개 이상의 Challenge(문제)에서 Full score(만점)를 받은 Hacker(참가자)들의 이름과 hacker_id를 출력해라. 이 때 결과 화면을 Full score를 받은 Challenge의 개수를 기준으로 내림차순 정렬하고 만약 Fulls score를 맏은 Challenge 개수가 동일하다면 hacker_id를 기준으로 오름차순 정렬 해라.

INPUT FORMAT

TABLE NAME : Hackers

TABLE NAME : Difficulty

TABLE NAME : Challenges

TABLE NAME : Submissions

SAMPLE INPUT

Sample Output

문제풀이

요약 : 둘 이상의 도전에서 만점을 받은 해커의 id,이름 출력
만점을 받은 도전 횟수 내림차순 정렬하며 동일할 경우 해커 아이디 오름차순 정렬

1) Full score(만점)을 맏은 챌린지가 2개 이상인 참가자들을 찾자.
2) 만점이란, Submissions 테이블의 score 값과 Difficulty 테이블의 score값이 일치하는 것을 의미
3) 2가지 정렬 기준을 만족해서 출력

  • 다만, submissions 테이블의 score는 참가자들이 부여받은 score이고 difficulty 테이블의 score는 난이도에 따른 total score라는 점을 유념
  • 문제의 만점기준 점수와 참가자가 풀고 난 점수가 동일 하면서 문제의 난이도가 동일해야 하기 때문에 WHERE 구문절을 통해 Full score를 맞은 참가자들만 필터링

  • HACKER_ID와 NAME을 기준으로 그룹핑시켜 Full score를 맞은 문제가 2개이상인 사람을 알아보자.

쿼리

SELECT D.HACKER_ID, D.NAME
FROM SUBMISSIONS A 
INNER JOIN CHALLENGES B ON A.CHALLENGE_ID = B.CHALLENGE_ID
INNER JOIN DIFFICULTY C ON B.DIFFICULTY_LEVEL = C.DIFFICULTY_LEVEL
INNER JOIN HACKERS D ON A.HACKER_ID = D.HACKER_ID

WHERE C.DIFFICULTY_LEVEL = B.DIFFICULTY_LEVEL AND C.SCORE = A.SCORE
GROUP BY D.HACKER_ID, D.NAME
HAVING COUNT(*) > 1
ORDER BY COUNT(D.HACKER_ID) DESC, D.HACKER_ID
profile
ice blue

0개의 댓글