📁 학습

프로그래머스 삼각형의 완성조건(2)


삼각형의 완성조건 (2) 문제

문제 링크

프로그래머스 입문_삼각형의 완성조건(2)

문제 설명

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

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

제한 사항

입출력 예

sidesresult
[1, 2]1
[3, 6]5
[11, 7]13

입출력 예 설명

입출력 예 #1

입출력 예 #2

입출력 예 #3

문제 해설

나머지 한 변이 될 수 있는 삼각형의 갯수는

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