본문 바로가기
SQL/코딩테스트

[MySQL] SQL 문제에서 문제정의방법

by Nanki 2024. 11. 8.

문제 참조 : https://www.hackerrank.com/challenges/full-score/problem

 

Top Competitors | HackerRank

Query a list of top-scoring hackers.

www.hackerrank.com

 

풀이 매크로

1. 문제 정의 : 두개이상의 챌린지에서 만점(full score) 받은 해커들의 이름과 hacker_id를 구해라

 - 만점의 정의는 무엇인가? 

 

2. 요구조건 : 

 - 풀 스코어기준으로 내림차순으로 정렬 후 2개이상 해커들은 오름차순으로 정렬해라

 

3. 문제 정의에 의한 탐색작업

 - 테이블들을 엮어서 풀스코어를 나름대로 정의해봄

 - 정의한 풀스코어로 손으로 계산하고 대조해본 다음 요구조건까지 고려하고 예시 output 결과와 같은지 비교

 - output과 같다면, SQL을 어떻게 작성할지 그다음 고민한다.

 

코드 작성

SELECT S.hacker_id, H.name
FROM Submissions AS S
    LEFT JOIN Challenges AS C ON S.challenge_id = C.challenge_id
    LEFT JOIN Difficulty AS D ON C.difficulty_level = D.difficulty_level
    LEFT JOIN Hackers AS H ON S.hacker_id = H.hacker_id
WHERE D.score = S.score
GROUP BY S.hacker_id, H.name
HAVING COUNT(S.challenge_id) >= 2
ORDER BY COUNT(S.challenge_id) DESC, hacker_id

 

배운 내용

1.  LEFT JOIN 대신 INNER JOIN을 사용해도 됨. 단 이 문제의 경우 JOIN 하는 양쪽 테이블의 정보가 모두 있다는 가정하에 가능하다.
2. GROUP BY에 들어가는 변수를  HAVING 절에 못넣음

3. 문제가 복잡할때 문제에서 정의를 내려야 할 것이 무엇인지 고민하고 예시에 접목해봐야 한다.