[Leet Code] 611
[Leet Code] 611
LeetCode 611. Valid Triangle Number
📝 문제 해석
정수 배열 nums
가 주어졌을 때, 배열에서 세 개의 수를 골라 삼각형의 세 변으로 만들 수 있는 경우의 수를 구하는 문제입니다.
삼각형의 조건은 삼각 부등식에 따라 가장 긴 변을 c
라 할 때,
a + b > c
가 반드시 성립해야 합니다.
💡 접근 방법
- 브루트포스 (O(n³))
- 세 개의 수를 전부 조합으로 골라 확인 → 배열 길이가 커지면 시간 초과
- 정렬 + 투 포인터 (O(n²))
- 배열을 오름차순 정렬
- 가장 긴 변
nums[k]
를 고정하고, 나머지 두 변을 투 포인터로 탐색 - 만약
nums[i] + nums[j] > nums[k]
라면,i..j-1
까지 모두 성립 → 한 번에 카운트
🧑💻 코드 (Python)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Ex 1)
nums = [2,2,3,4] # Output: 3
from typing import List
class Solution:
def triangleNumber(self, nums: List[int]) -> int:
# 오름차순 정렬
nums.sort()
answer = 0
# 삼각형 조건 : a + b > c
for k in range(len(nums) - 1, 1, -1):
i, j = 0, k - 1
while i < j:
if nums[i] + nums[j] > nums[k]:
answer += j - i
j -= 1
else:
i += 1
return answer
S = Solution()
print(S.triangleNumber(nums))
This post is licensed under CC BY 4.0 by the author.