문제
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.
nums 배열이 들어오면, 그 중 세 개의 요소로 이루어진 삼각형의 가장 큰 둘레를 반환한다.
삼각형을 만드는 것이 불가능하면 0을 반환한다.
예시
Example 1:
Input: nums = [2,1,2]
Output: 5
Example 2:
Input: nums = [1,2,1]
Output: 0
제약조건
Constraints:
- 3 <= nums.length <= 104
- 1 <= nums[i] <= 106
해결 과정
처음에는 nums 배열 요소가 3개 들어온다고 가정을 하고 문제를 풀었는데, 더 많은 요소가 들어오는 것을 파악하고 코드를 다르게 하여 해결하였다.
- 우선 nums 배열을 내림차순으로 정리한다.
- 길이의 순서에 따라 변의 길이를 할당할 n1, n2, n3 를 초기화한다.
- for문을 돌면서 삼각형의 조건을 만족하는지 확인한다.
- 세 변의 길이를 알고 있을 때 삼각형이 되는 조건은 가장 긴 변의 길이가 두 변의 길이보다 작아야 한다.
- 이 조건을 만족시킨다면 n1, n2, n3에 값을 할당하고 for문을 빠져나온다.
- 조건을 만족시키지 못했다면 n1, n2, n3에는 처음에 할당했던 0이 담겨져있다.
- for문을 나온 후 n1 + n2 + n3 한 값을 반환한다.
해결 코드
/**
* @param {number[]} nums
* @return {number}
*/
var largestPerimeter = function(nums) {
// 가장 긴 변의 길이는 두 변의 합보다 작아야 함
nums.sort((a, b) => b- a);
console.log(nums)
let n1 = 0,
n2 = 0,
n3 = 0;
for(let i = 0 ; i < nums.length - 2 ; i++){
if(nums[i] < nums[i + 1] + nums[i + 2]){
n1 = nums[i];
n2 = nums[i + 1];
n3 = nums[i + 2];
break;
}
}
return n1 + n2 + n3;
};
'leetCode' 카테고리의 다른 글
[Easy] 1822. Sign of the Product of an Array (0) | 2022.05.30 |
---|---|
[Easy] 1779. Find Nearest Point That Has the Same X or Y Coordinate (0) | 2022.05.30 |
[Easy] 1281. Subtract the Product and Sum of Digits of an Integer (2) | 2022.05.26 |
[Easy] 1523. Count Odd Numbers in an Interval Range (0) | 2022.05.26 |
[Easy] 1491. Average Salary Excluding the Minimum and Maximum Salary (0) | 2022.05.26 |
Comment