[js] 삼각형의 완성조건(2) (lv.0, 정답률 80%)

sookyoung.k·2024년 4월 23일
0
post-thumbnail

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항

  • sides의 원소는 자연수입니다.
  • sides의 길이는 2입니다.
  • 1 ≤ sides의 원소 ≤ 1,000

나의 풀이

function solution(sides) {
    let long = Math.max(sides[0], sides[1]);
    let short = Math.min(sides[0], sides[1]);
    let possible = [];

    for (let i = long - short + 1; i <= long; i++) {
        possible.push(i);
    }
    for (let i = long + 1; i < long + short; i++) {
        possible.push(i);
    }
    return possible.length;
}

먼저 Math의 max함수와 min함수로 sides에서 긴 쪽과 짧은 쪽을 구했다.

그리고 도는 포문은 차례대로 long 값이 가장 긴 변일 경우, 나머지 변이 가장 긴 변일 경우를 구해서 배열에 넣는다.

그리고 배열의 길이를 구해서 반환한다.

for문의 조건을 열심히 구했음. 근데 풀고 나니까 굳이 for문을 두 개로 나눌 필요가 없던 것 같다.

    for (let i = long-short+1; i< long+short; i++) {
        possible.push(i)
    }

그래서 하나로 합쳤더니 이거도 통과함!

다른 풀이 1

function solution(sides) {
    return Math.min(...sides)*2-1
}

ㅖ?

이 풀이가 제대로 된 건지는...? 잘 모르겠다. 답은 나오나본데... 이해 못했음. 정확한 풀이는 아니라는 것 같은데...일단 넘어가겠음.

다른 풀이 2

function solution(sides) {
    let a = Math.min(...sides)
    let b = Math.max(...sides)
    let answer = 0
    for(let i = 1 ; i < a+b ; i++){
        let arr = [a,b,i].sort((a,b) => a-b)
        let [q,w,e] = arr
        if(q+w > e){
            answer++
        }
    }
    return answer;
}
  • 두 변 중 a, b에 각각 더 긴 변과 짧은 변을 할당한다.
  • for문을 사용해 1부터 a+b 미만의 모든 정수에 대해서 반복한다.
  • 현재 반복중인 숫자와 a, b를 배열에 넣고 오름차순으로 정렬한다. 이렇게 하면 무조건 q, w, e의 길이 차이가 정해진다.
  • if(q+w >e) 조건문이 삼각형의 성립 조건이다. 이를 충족할 경우 answer를 1 증가시킨다.

깔끔한 풀이인 것 같다.

profile
영차영차 😎

0개의 댓글