작심삼일

[LeetCode] 976 | Largest Perimeter Triangle | Python 본문

스터디/코테

[LeetCode] 976 | Largest Perimeter Triangle | Python

yun_s 2022. 10. 12. 09:51
728x90
반응형

문제 링크: https://leetcode.com/problems/largest-perimeter-triangle/


문제

Given an integer array nums, return the largest perimeter of a triangle with a non-zero area, formed from three of these lengths. If it is impossible to form any triangle of a non-zero area, return 0.


조건

  • 3 <= nums.length <= $10^4$
  • 1 <= nums[i] <= $10^6$

내 풀이

삼각형이 되는 조건은 각 변의 길이가 a > b > c라 할 때, a < (b+c)를 만족해야 한다.

그렇기 때문에 nums를 내림차순으로 정렬한 뒤 a < (b+c)를 만족함을 확인한다.

이 때, 연속된 수를 확인하는 이유는 만약 nums[i] < (nums[i+1]+nums[i+2])가 성립하지 않는다면 nums[i+2] > nums[i+3]이기 때문에 nums[i] < (nums[i+1]+nums[i+3])도 당연히 성립하지 않기 때문이다.


코드

class Solution:
    def largestPerimeter(self, nums: List[int]) -> int:
        nums.sort(reverse=True)
        
        for i in range(len(nums)-2):
            if nums[i] < (nums[i+1]+nums[i+2]):
                return sum(nums[i:i+3])
        
        return 0
728x90
반응형
Comments