문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.
sides의 원소는 자연수입니다.
sides의 길이는 3입니다.
1 ≤ sides의 원소 ≤ 1,000
const sides = [1, 2, 3]; // 2
const sides2 = [3, 6, 2]; // 2
const sides3 = [199, 72, 222]; // 2
function solution(sides) {
var answer = 0;
let max = Math.max(...sides); // 가장 큰 수 저장
answer = sides.filter((el) => el < max).reduce((a, b) => a + b, 0);
// 가장 큰 수 보다 작은 요소들 걸러서 더 해주기
return answer > max ? 1 : 2; // 비교하기
}
아래의 입력값은 통과
const sides = [1, 2, 3];
solution(sides); // 2
const sides2 = [3, 6, 2];
solution(sides2); // 2
const sides3 = [199, 72, 222];
solution(sides3); // 1
큰 수와 같은 수가 있을 경우 반례가 존재했다.
출력 값은 1이 나와야하지만 2가 나오는 상황.
const sides4 = [3,3,2];
solution(sides4); // 2
이유는 아래의 filter
에서 max보다 작은 값을 걸러 주었기 때문에, [3, 3, 2]의 경우 [2]만 반환 되었기 때문이다.
answer = sides.filter((el) => el < max).reduce((a, b) => a + b, 0);
그래서 filter
를 빼주기로 했다.
function solution(sides) {
var answer = 0;
let max = Math.max(...sides); // 가장 큰 수 저장
answer = sides.reduce((a, b) => a + b, 0);
// sides 배열 다 더해주기
return (answer - max) > max ? 1 : 2;
// answer - max 값이 max보다 크다면 1, 작다면 2
}
max 값은 저장해두고, 입력되는 배열의 모든 값을 reduce
로 다 더해 answer로 반환, answer - max가 max 보다 크다면 1, 작다면 2를 출력한다.
function solution(sides) {
sides = sides.sort((a,b) => a-b)
return sides[0]+sides[1] > sides[2] ? 1 : 2;
}
더 간단하게 풀 수 있었다! 외워두기