[ 알고리즘 ] LeetCode 2118. Build the Equation

이주 weekwith.me·2022년 6월 22일
0

알고리즘

목록 보기
20/73
post-thumbnail

블로그를 이전 중이라 완료되기 전까지는 벨로그에 작성할 계획입니다.
이후 모든 글은 https://weekwith.me 에 작성 예정이니 다른 글이 궁금하시다면 해당 링크를 통해 방문해주세요.

본 글은 [ LeetCode ] 2118. Build the Equation을 풀고 작성한 글입니다.

문제

테이블

Table: Terms

+-------------+------+
| Column Name | Type |
+-------------+------+
| power       | int  |
| factor      | int  |
+-------------+------+
power is the primary key column for this table.
Each row of this table contains information about one term of the equation.
power is an integer in the range [0, 100].
factor is an integer in the range [-100, 100] and cannot be zero.

요구사항

You have a very powerful program that can solve any equation of one variable in the world. The equation passed to the program must be formatted as follows:

  • The left-hand side (LHS) should contain all the terms.
  • The right-hand side (RHS) should be zero.
  • Each term of the LHS should follow the format "<sign><fact>X^<pow>" where:
    • <sign> is either "+" or "-" .
    • <fact> is the absolute value of the factor .
    • <pow> is the value of the power .
  • If the power is 1 , do not add "^<pow>" .
    • For example, if power = 1 and factor = 3 , the term will be "+3X" .
  • If the power is 0, add neither "X" nor "^<pow>" .
    • For example, if power = 0 and factor = -3 , the term will be "-3" .
  • The powers in the LHS should be sorted in descending order.

Write an SQL query to build the equation.

풀이

접근법

CASE 구를 활용하여 문제에 제시된 상황에 맞춰 LHS 값을 작성하고 이후 GROUP_CONCAT 함수를 사용해서 해당 LHS 값들을 연결하면 된다. 이때 ORDER BY 구를 통해 power 필드를 기준으로 내림차순 정렬하고 SEPARATOR 구의 값은 '' 으로 지정하여 아무런 기준 없이 결합되도록 한다.

끝으로 우측에 =0 값이 들어가야 하기 때문에 GROUP_CONCAT 함수를 CONCAT 함수로 한번 더 감싸줘야 한다.

나의 풀이

접근법을 토대로 문제를 해결하면 아래와 같다. 이때 유의해야 할 사항은 GROUP_CONCAT 함수 내부의 대상으로 컬럼이 아닌 다른 것을 사용하면 안 된다는 것이다.

예를 들어 아래와 같이 서브쿼리로 LHS 필드를 따로 구하는 게 아닌 CASE 구 자체를 GROUP_CONCAT 함수에 넣으면 해당 CASE 구를 실행한 결괏값을 토대로 함수가 작동되는 것이 아닌 CASE 구 전체를 하나의 문자열로 인식해서 작동한다.

GROUP_CONCAT 함수를 사용할 때는 이점에 유의해야 한다.

SELECT CONCAT(GROUP_CONCAT(LHS ORDER BY power DESC SEPARATOR ''), '=0') AS equation
FROM (
    SELECT
        power,
        CASE power
            WHEN 1 THEN IF(factor > 0, CONCAT('+', factor, 'X'), CONCAT(factor, 'X'))
            WHEN 0 THEN IF(factor > 0, CONCAT('+', factor), CONCAT(factor))
            ELSE IF(factor > 0, CONCAT('+', factor, 'X', '^', power), CONCAT(factor, 'X', '^', power))
        END AS LHS
    FROM Terms
) AS LHSTemrs;
profile
Be Happy 😆

0개의 댓글