11. [Java] 삼각형의 완성조건(2): case2는 왜 longer - shorter인가?
https://school.programmers.co.kr/learn/courses/30/lessons/120868
- 프로그래머스 삼각형의 완성조건(2)
- 두 변이 주어졌을 때, 나머지 한 변
x
가 삼각형이 될 수 있는 정수 개수를 구하는 문제 - 삼각형이 되기 위한 조건: 가장 긴 변 < 나머지 두 변의 합
정수 범위 공식
- x ∈ (longer - shorter, longer + shorter)
- 즉, 가능한 정수 x의 범위는
- longer - shorter + 1 ≤ x ≤ longer + shorter - 1
정답 코드
import java.util.*;
class Solution {
public int solution(int[] sides) {
Arrays.sort(sides); // 배열 오름차순 정렬
int shorter = sides[0];
int longer = sides[1];
// case1: x가 가장 긴 변일 때 -> x < a + b
int case1 = longer + shorter - 1;
// case2: x가 짧거나 중간인 경우 -> x > max - min
int case2 = longer - shorter;
return case1 - case2;
}
}
case2가 longer - shorter + 1이 아니라 longer - short인 이유
case2
실제 시작값은longer - shorter + 1
- 하지만 정수 개수를 계산할 때는 시작값 - 1을 기준으로 계산해야 하므로
case2 = longer - shorter
로 설정하는 것이 정확함 - 실제 시작값보다 1 작게 설정되어야 하므로
+1
이나-1
필요 없는 것
예시
- 입력: sides = [3, 6]
- 가능한 x: 4, 5, 6, 7, 8 → 총 5개
- 계산:
case1 = 3 + 6 - 1 = 8
case2 = 6 - 3 = 3
answer = 8 - 3 = 5 ✅