Skip to main content

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 ✅