문제 및 테이블
Description
해당 문제는 다음과 같은 상황을 기반으로 합니다: 사람들이 버스를 이용할 때, 각 사람의 무게가 1000kg 이하인 경우에 최선의 사람을 선택하는 것이 필요합니다.
Table & Example
다음은 해당 테이블과 예제입니다.
+-------------+-------------+--------+------+
| Column Name | person_name | weight | turn |
+-------------+-------------+--------+------+
| Alice | 250 | Bob | 175 |
| Alex | 350 | John | 400 |
| Winston | 500 | Marie | 200 |
+-------------+-------------+--------+------+
이 테이블은 각 사람의 ID, 이름, 무게 및 순서를 나타냅니다.
풀이 및 피드백
풀이
각 사람의 순서에 따라 누적 총무게가 1000kg을 초과하지 않도록 계산합니다. 최고 순서인 사람이 최종적으로 버스에 탑승할 수 있는 사람이라는 사실을 이용하여 이를 구현하는 방법을 사용하였습니다.
다음은 이 문제를 해결하기 위한 SQL 쿼리입니다:
WITH CTE AS(
SELECT *,
SUM(weight) OVER (ORDER BY turn) AS Total_weight
FROM Queue
)
SELECT person_name
FROM CTE
WHERE Total_weight <=1000
ORDER BY Total_weight DESC
limit 1
피드백 및 개선점
이 코드는 원활하게 작동하는 코드이며, 문제를 효과적으로 해결하는 방안을 제공했습니다.
한 가지 주의할 점은 이 코드가 중복된 무게가 존재할 수 있다는 사실입니다. 그러나 문제에서 제시된 예제에서는 이것은 발생하지 않기 때문에 이 코드가 정확하게 동작하도록 보이지만, 이를 고려한 쿼리를 사용하는 것이 좋습니다.
또한 limit 1
을 사용하여 마지막으로 계산된 값을 선택하는 방식은 효율적이지 않습니다. 이 경우 대신에 first_value()
또는 lag()
함수가 이용될 수 있습니다.
WITH CTE AS(
SELECT *,
SUM(weight) OVER (ORDER BY turn) AS Total_weight
FROM Queue
)
SELECT person_name
FROM CTE
WHERE Total_weight <=1000
AND row_number() OVER(ORDER BY Total_weight DESC, turn) = 1;
위의 코드를 사용하면 마지막으로 누적 무게가 1000kg 이하인 사람들을 가리키는 행을 선택할 수 있습니다. 이 방법은 문제에서 제시된 방식을 따르면서도 성능 및 효율성을 유지하는 데 도움이 될 것입니다.
아직 완벽하지는 않은 것 같습니다. 코드부분에서도 그렇고 학습량이 적은 모델은 실사용에서 부족한 모습인 것 같습니다.
GPT가 다시금 대단한 기분입니다.
위의 피드백 코드는 정상적으로 작동하지 않습니다.
확인해보니 제가 작성한 코드 또한 '<' 부분이 정상적으로 읽히지 않아 교체하였습니다.
WITH CTE AS (
SELECT *,
SUM(weight) OVER (ORDER BY turn) AS Total_weight
FROM Queue
)
SELECT person_name
FROM (
SELECT person_name,
row_number() OVER(ORDER BY turn) AS rn
FROM CTE
WHERE Total_weight = 1000
) AS SubQuery
WHERE rn = 1;
프롬프트 엔지니어링과 더불어 아직 로컬에서 작은 모델로 정밀한 작업을 하기에는 무리가 있어 보입니다.
-> gpt API는 얼마나 성능이 나올까요?
추후에는 아예 github에 자동으로 action을 적용해볼까 싶습니다.
'코딩테스트 > SQL' 카테고리의 다른 글
SQL > LeetCode 1341. Movie Rating (MySQL) (2) | 2024.06.14 |
---|---|
SQL > LeetCode 1907. Count Salary Categories (MySQL) (2) | 2024.06.13 |
SQL > LeetCode 1204. Last Person to Fit in the Bus (MySQL) (0) | 2024.06.12 |
SQL > LeetCode Problem Solving: Product Price at a Given Date (AI.ver) (0) | 2024.06.11 |
SQL > LeetCode 1164. Product Price at a Given Date (MySQL) (0) | 2024.06.11 |