선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
삼각형의 두 변의 길이가 담긴 배열 sides
이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.
sides
의 원소는 자연수입니다.sides
의 길이는 2입니다.sides
의 원소 ≤ 1,000sides | result |
---|---|
[1, 2] | 1 |
[3, 6] | 5 |
[11, 7] | 13 |
입출력 예 #1
입출력 예 #2
입출력 예 #3
💡 문제풀이 과정
- 경우의 수는 2가지다.
Case A
) sides 배열의 값 중 Max인 값이 가장 긴 변의 길이가 되는 것.
- max < min + x
- max - min < x
Case B
) 다른 한 변의 길이 x가 가장 긴 변의 길이가 되는 것.
- x < max + min
Case A & B
를 정리하면 아래와 같다.
- max - min < x < max + min
- (max + min) - (max - min) - 1 (범위가 초과, 미만이므로 -1 해줌)
- max + min - max + min - 1 (괄호 없애면,
-(-min)
의 경우+min
이 되므로)- min + min - 1
- 2 * min - 1
- 답안 1번:
while()
문을 통해 범위에 해당되는 조건을 걸어주고 빈 배열에push()
하여배열의 length
를 리턴하였다. 입출력 예시 설명대로 구현한 방법.- 답안 2번: 위의 식들을 줄이고 줄여서 풀이한 방법이다. 다른 사람의 풀이로 처음에 보고 띠용?한 답안인데, 부등식을 이항하며 차근차근 풀이 해 보니 이해가 갔다.. 😅
✅ 답안 #1
function solution(sides) {
let answer = [];
let n = Math.min(...sides);
let m = Math.max(...sides);
let a = m - n;
let b = m;
//m이 가장 긴 변일 때
while (a < m) {
a++;
answer.push(a);
}
//b가 가장 긴 변일 때
while (b < m + n - 1) {
b++;
answer.push(b);
}
return answer.length;
}
✅ 답안 #2
function solution(sides) {
return Math.min(...sides) * 2 - 1;
}
// Case 1. 배열 [a, b]중 a가 가장 긴 변의 길이 인 경우
// a < b + x
// a - b < x
// Case 2. x가 가장 긴 변의 길이 인 경우
// x < a + b
// Case 1 & 2를 정리하면 아래와 같다.
// a - b < x < a + b
// a + b - (a - b) - 1
// a + b - a + b - 1
// a + b - 1
// 2 * b - 1