Tác giả: Lê Trung Kiên lớp java 08
Email: lekien.2803.cg@gmail.com
SĐT: 0942096947
Link bài toán: https://leetcode.com/problems/triangle-judgement/

1. Mở đầu

Xin chào các bạn, mình viết ra bài viết này để chia sẻ phương pháp giải cũng như tư duy của mình về bài toán này của leetcode. Phương pháp của mình có thể không phải là tối ưu nhất, tuy nhiên mình sẽ phân tích, chia nhỏ bài toán ra thành các module nhỏ hơn để dễ giải quyết cũng như giúp các bạn hiểu được các yêu cầu mà bài toán đưa ra.

2. Đề bài

Cho bảng Triangle

+-------------+------+
| Column Name | Type |
+-------------+------+
| x           | int  |
| y           | int  |
| z           | int  |
+-------------+------+
(x, y, z) là khóa chính của bảng.
Mỗi hàng của bảng này chứa độ dài của ba đoạn thẳng..

Viết câu lệnh truy vấn SQL kiểm tra xem mỗi cặp ba đoạn thẳng có thể tạo thành một hình tam giác hay không.
Trả về bảng kết quả theo thứ tự bất kì.
Định dạng kết quả truy vấn nằm trong ví dụ sau.

Ví dụ 1:

Input: 
Triangle table:
+----+----+----+
| x  | y  | z  |
+----+----+----+
| 13 | 15 | 30 |
| 10 | 20 | 15 |
+----+----+----+
Output: 
+----+----+----+----------+
| x  | y  | z  | triangle |
+----+----+----+----------+
| 13 | 15 | 30 | No       |
| 10 | 20 | 15 | Yes      |
+----+----+----+----------+

SQL Schema:

Create table If Not Exists Triangle (x int, y int, z int)
Truncate table Triangle
insert into Triangle (x, y, z) values ('13', '15', '30')
insert into Triangle (x, y, z) values ('10', '20', '15')

3. Phân tích

Ấu kề, bài này hơi khác một chút ở chỗ khóa chính của nó lại là ba cặp số. Cứ ba cặp số không trùng lặp sẽ là một khóa chính riêng.
Nhắc lại một chút về kiến thức toán học, để kiểm tra xem ba đoạn thẳng có tạo nên được một hình tam giác hay không, chúng ta sử dụng định lý bất đẳng thức tam giác: trong một tam giác, tổng độ dài hai cạnh bất kỳ bao giờ cũng lớn hơn độ dài cạnh còn lại. Thỏa mãn điều kiện trên thì ba đoạn thẳng sẽ tạo ra được một hình tam giác.
Trong bài này, với ba điều kiện cần được thỏa mãn, ta sẽ sử dụng câu lệnh case...when... trong SQL để truy vấn. Nhắc lại một chút, câu lệnh case...when... sẽ có cấu trúc như sau:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

4. Code chạy luôn

Code của chúng ta sẽ như sau:

select *,
   case
    when x + y > z and x + z > y and y + z > x then 'Yes'
    else 'No'
   end as 'triangle'
from triangle

5. Kết thúc

Qua bài viết này, mình đã chia sẻ cho các bạn cách mình tư duy khi giải bài tập trên leetcode. Hi vọng bài viết giúp ích cho các bạn trong cách tư duy để giải các bài tập khác. Xin cám ơn các bạn đã dành thời gian đọc và theo dõi. Peace!!!