본문 바로가기
PROGRAMMING/LeetCode

[Leetcode] 177. Nth Highest Salary_해설, 풀이, 설명

by HYUNHP 2022. 8. 20.
728x90
반응형

안녕하세요, HELLO

 

오늘은 Leetcode 알고리즘 문제 '177. Nth Highest Salary'에 대해서 살펴보고자 합니다. 

 

알고리즘 문제, 코드, 해설 그리고 Leetcode에서 제공해준 solution 순서대로 정리하였습니다.


STEP 1. 'Nth Highest Salary' 알고리즘 문제

 

STEP 2. 'Nth Highest Salary' 코드(code)

 

STEP 3. 'Nth Highest Salary' 해설

 

STEP 4. 'Nth Highest Salary' solution

 

반응형

 

STEP 1. 'Nth Highest Salary' 알고리즘 문제

 

 

Write an SQL query to report the nth highest salary from the Employee table. If there is no nth highest salary, the query should report null. 

 

Employee 테이블에서 n번째로 큰 급여를 반환하는 query를 작성하면 됩니다. 만약에 n번째로 큰 급여 정보가 없다면, NULL을 반환합니다.

 

The query result format is in the following example.

01


STEP 2. 'Nth Highest Salary' 코드(code)

 

■ Runtime: Runtime: 328 ms, faster than 82.22% of MySQL online submissions for Nth Highest Salary.
■ Memory Usage: Memory Usage: 0B, less than 100.00% of MySQL online submissions for Nth Highest Salary.

 

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M = N-1;
  RETURN (
      # Write your MySQL query statement below.
      SELECT DISTINCT salary
      # When not using DISTINCT can't cover NULL case

      FROM Employee
      ORDER BY salary DESC
      LIMIT M, 1
      # Why not using N-1 instead of declaring M
      # Leetcode version can't support it
  );
END

STEP 3. 'Nth Highest Salary' 해설

 

새로운 변수 N-1인 M을 선언하는 이유는, discussion에서 확인한 결과 leetcode 버전 문제로 N-1을 바로 실행할 경우 error가 발생하기 때문입니다. 그래서 DECLARE M INT 그리고 SET M = N-1을 선언합니다.

 

그리고 SELECT DISTINCT salary인 이유는 문제에서 "If there is no nth highest salary, the query should report null."를 충족하기 위해서 설정합니다.

 

 

STEP 4. 'Nth Highest Salary' solution

 

추가적으로, Leetcode에서 제공해준 solution 코드를 살펴보겠습니다.

 

■ Runtime: Runtime: 538 ms, faster than 42.39% of MySQL online submissions for Nth Highest Salary.
■ Memory Usage: Memory Usage: 0B, less than 100.00% of MySQL online submissions for Nth Highest Salary.

 

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN

SET N=N-1;

  RETURN (
      SELECT DISTINCT salary FROM Employee ORDER BY salary DESC 
      LIMIT 1 OFFSET N      
  );
END

■ 마무리

 

오늘은 Leetcode 알고리즘 문제 '177. Nth Highest Salary'에 대해서 알아봤습니다.

좋아요와 댓글 부탁드리며,

오늘 하루도 즐거운 날 되시길 기도하겠습니다 :)

감사합니다.

 

반응형

댓글