코딩테스트(JavaScript) Leetcode : 976. Largest Perimeter Triangle

Parkboss·2022년 10월 13일
0

코딩테스트

목록 보기
15/19

✅문제

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가 주어질 때, 이 길이 중 3변의 면적이 형성될 때, 0이 아닌 가장 큰 삼각형 둘레를 구하여라.
만약 삼각형을 만들 수 없다면 0을 리턴 하라.

📢 입출력 예제

Example 1:

Input: nums = [2,1,2]
Output: 5

Example 2:

Input: nums = [1,2,1]
Output: 0

일단 문제는 이해했지만 가장 큰 삼각형의 둘레를 어떤 방식으로 풀어야 될지 감이 잡히지 않았다..
아래 유트브를 통해 가장 큰 삼각형의 둘레를 구하는 원리를 알게되었다.

3변의 길이가 주어질 때 두변의 합이 가장 긴변보다 크면 삼각형이 만들어진다.
즉, a b c = [ 2, 1, 2 ] 이면 a+b > c, b+c > a, a+c > b 를 모두 총족해야 큰 삼각형의 둘레를 구할수 있다.

💻 내 풀이

var largestPerimeter = function(nums) {
    nums.sort((a,b) => b-a);
    for(let i = nums.length-1; i <= 2; i--) {
     }if(nums[i] = nums[i-1]+ nums[i-2]) {
         return nums[i]+nums[i-1]+nums[i+2];
     }
     return 0;
};

저 영상 보고 힌트를 얻어 풀었는데 자꾸 i가 정의되지 않았다고 뜨고 무엇이 잘못된 건지 이유를 알 수 없었다!!!!!!!!!!!!!

💻 다른 사람 풀이

var largestPerimeter = function(nums =[]) {
    nums.sort((a,b) => b-a);
    for(let i = 0; i < nums.length-2; i++) {
      // 여기서 다른 사람 문제풀이를 보니 length만 한사람이 있고 -2, -3한 사람도 있음
     if(nums[i] < nums[i+1]+ nums[i+2]) {
         return nums[i]+ nums[i+1]+ nums[i+2];
     }
    }
     return 0;
};
  • 일단 sort를 사용하여 내림차순으로 숫자를 바꾸어준다. [1,2,2]
  • for 문을 돌면서 nums.length2가 i보다 크다.
  • 여기서 의문? 왜 2를 해주는 걸까? 그냥 한번 for 문만 돌려고 만든 건가?
  • 그냥 nums.length만 해서 문제를 풀어보니 풀린다. 굳이 3번의 for 문을 돌리지 않으려고 저렇게 2를 해주는 건가? 싶다
  • nums[i] 번째는 1이다. 1 < 2 + 2는 true이므로 모든 더한 값을 리턴한다.

왜 나는 이런 생각이 나지 않는 것일까!!!!!

Leetcode에서 해결한 문제가 카운팅 되지 않을 때

리뉴얼된 UI 릿코드에서는 문제를 풀어도 LeetHub에 문제가 카운팅 되지 않더라고요!
아래 링크를 눌러보시면 해결할 수 있습니다!

문제 푸실 때 내 프로필을 클릭하여 예전 버전의 릿코드로 변환해 주시면 해결됩니다!

profile
ur gonna figure it out. just like always have.

0개의 댓글