삼각형의 완성조건 (2) 문제
문제 링크
문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.
제한 사항
sides
의 원소는 자연수입니다.sides
의 길이는 2입니다.- 1 \≤
sides
의 원소 \≤ 1,000
입출력 예
sides | result |
---|---|
[1, 2] | 1 |
[3, 6] | 5 |
[11, 7] | 13 |
입출력 예 설명
입출력 예 #1
- 두 변이 1, 2 인 경우 삼각형을 완성시키려면 나머지 한 변이 2여야 합니다. 따라서 1을 return합니다.
입출력 예 #2
- 가장 긴 변이 6인 경우 될 수 있는 나머지 한 변은 4, 5, 6 로 3개입니다.
- 나머지 한 변이 가장 긴 변인 경우 될 수 있는 한 변은 7, 8 로 2개입니다.
- 따라서 3 + 2 = 5를 return합니다.
입출력 예 #3
- 가장 긴 변이 11인 경우 될 수 있는 나머지 한 변은 5, 6, 7, 8, 9, 10, 11 로 7개입니다.
- 나머지 한 변이 가장 긴 변인 경우 될 수 있는 한 변은 12, 13, 14, 15, 16, 17 로 6개입니다.
- 따라서 7 + 6 = 13을 return합니다.
문제 해설
나머지 한 변이 될 수 있는 삼각형의 갯수는
2 * min(sides) - 1 이다.
위와 같은 식이 어떻게 도출되는지 예시 값을 넣어서 알아보자.
sides = [11,7] 일 때
[11, 7]이 입력될 때 남은 한 변의 길이를 x라고 가정하자.
그럼 삼각형의 각 변의 길이는 11, 7, x가 된다.
삼각형이 되기 위해서는 다음과 같은 조건을 만족해야 한다.
가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 한다.
따라서 현재 가장 긴 변이 될 수 있는 수는 11또는 x이다.
각 경우에 대해 범위범 세워본다면 다음과 같다.
11이 제일 긴 변 일때
7 + x > 11, x<=11
11이 제일 긴 변 일때는 위 범위를 만족해야 한다.
왜냐하면 가장 짧은 변인 7과, 그 다음으로 짧은 변인 x의 합이 제일 긴 변인 11보다 길어야 하고,
11이 제일 긴 변이기 때문에 x는 11보다 클 수 없기 때문이다.
따라서 11이 제일 긴 변이라면 x의 범위는 다음과 같다.
4 < x <= 11
x가 제일 긴 변 일때
7 + 11 > x, x>11
x가 제일 긴 변 일때는 위의 범위를 만족해야 한다.
왜냐하면 긴 변을 제외하고 나머지 두 변(7, 11)의 합이 제일 긴 변인 x보다 커야 하고,
x가 제일 긴 변이기 때문에 x는 11보다 커야 하기 때문이다.
이등변 삼각형의 경우를 생각하면 제일 긴 변이 두 개 존재할 수도 있어서 x가 11이 될 수도 있지만,
그 경우는 11이 제일 긴 변 일때 조건에 포함시켰으므로 여기서는 제외한다.
따라서 xrk 제일 긴 변이라면 x의 범위는 다음과 같다.
11 < x < 18
범위 합치기
위의 두 경우의 범위을 하나로 합치면 다음과 같다.
4 < x < 18
따라서 x에 범위에 해당하는 정수는 총 (18 - 4 - 1)로 총 13개가 된다.
일반화 하기
minValue: min(sides)
이라고 할 때 x의 범위는 다음과 같다.
(max - min) < x < (max + min)
여기서 x에 들어올 수 있는 정수의 갯수를 구하기 각 범위의 차를 계산하면 다음과 같다.
(max + min) - (max - min) - 1