11. [Java] 삼각형의 완성조건(2): case2는 왜 longer - shorter인가?
1. 문제 요약
- https://school.programmers.co.kr/learn/courses/30/lessons/120868
- 프로그래머스 삼각형의 완성조건(2)
- 두 변이 주어졌을 때, 나머지 한 변
x
가 삼각형이 될 수 있는 정수 개수를 구하는 문제 - 삼각형이 되기 위한 조건: 가장 긴 변 < 나머지 두 변의 합
2. 정수 범위 공식
- 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;
}
}
3. longer - shorter + 1이 아닌 이유
- 왜
case2 = longer - shorter
인가? case2
는 가능한 x의 시작값이 아님- 실제 시작값은
longer - shorter + 1
- 하지만 정수 개수를 계산할 때는 시작값 - 1을 기준으로 계산해야 하므로
case2 = longer - shorter
로 설정하는 것이 정확함
4. 예시
- 입력: sides = [3, 6]
- 가능한 x: 4, 5, 6, 7, 8 → 총 5개
- 계산:
case1 = 3 + 6 - 1 = 8
case2 = 6 - 3 = 3
answer = 8 - 3 = 5 ✅
요약
case2
는 정수 개수 계산용 보조값- 실제 시작값보다 1 작게 설정되어야 하므로
+1
이나-1
필요 없음 - 수식 하나로 정확히 계산 가능
- (shorter + longer - 1) - (longer - shorter)