문제
https://school.programmers.co.kr/learn/courses/30/lessons/120868
풀이
class Solution {
public int solution(int[] sides) {
int answer = 0;
int a = sides[0];
int b = sides[1];
int min = Math.abs(a - b) + 1;
int max = (a + b) - 1;
answer = max - min + 1;
return answer;
}
}
참고
🔺 삼각형의 조건 공식 증명: (|a - b| < c < a + b)
|a - b| < c < a + b
✅ 삼각형이 되기 위한 조건: 삼각형 부등식
삼각형을 이루기 위한 기본 조건은 다음 3가지다:
- ( a + b > c )
- ( a + c > b )
- ( b + c > a )
이 세 가지는 동시에 모두 만족해야 한다.
✅ 각 식을 (c) 중심으로 정리해보면:
- ( a + b > c ) ⟶ ( c < a + b ) ✅
- ( a + c > b ) ⟶ ( c > b - a )
- ( b + c > a ) ⟶ ( c > a - b )
✅ 두 번째, 세 번째 조건을 합치면?
- ( c > b - a )
- ( c > a - b )
이 두 조건을 모두 만족해야 하므로, c는 둘 중 더 큰 값보다 커야 함
c > max(a - b, b - a) = |a - b|
✅ 최종적으로 정리하면:
- ( c > |a - b| )
- ( c < a + b )
|a - b| < c < a + b
이 공식이 우리가 원하는 세 번째 변 c의 범위가 된다!
✅ 예를 들어 (a = 3), (b = 6)이라면:
- ( |a - b| = 3 )
- ( a + b = 9 )
따라서 3 < c < 9
가능한 정수 값: 4, 5, 6, 7, 8 → 총 5개
✅ 실제 활용: 가능한 정수 개수 구하기
int a = 3;
int b = 6;
int min = Math.abs(a - b) + 1;
int max = a + b - 1;
int count = max - min + 1;
if (count < 0) count = 0; // 삼각형 불가능한 경우
✅ 마무리
삼각형의 세 번째 변의 조건
(|a - b| < c < a + b)
은 삼각형 부등식을 c 중심으로 정리해서 나온 공식이다.
이 범위 안에 있는 정수 개수를 구하면, 삼각형을 만들 수 있는 모든 경우의 수를 알 수 있다.
최소값 ~ 최대값 사이 개수 구하기
코드 예시
int min = Math.abs(a - b) + 1; // |a - b| + 1
int max = a + b - 1; // a + b - 1
int count = max - min + 1;
- min은 최소 가능한 정수값 (열린 구간이니까 +1)
- max는 최대 가능한 정수값 (열린 구간이니까 -1)
- count = max - min + 1 은 정수 개수 구하는 공식
📌 핵심 정리
목적 | 왜 그렇게 하는가 |
min = | a - b |
max = a + b - 1 | < 부등식이니까 최대값보다 1 작은 정수까지만 포함 |
count = max - min + 1 | min과 max 둘 다 포함하는 정수 개수를 세려면 +1 필요 |
🧠 공식으로 다시 정리하면
개수 = (최대값 - 최소값) + 1
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv.0 | 숨어있는 숫자의 덧셈 (2) | Java (0) | 2025.10.01 |
---|---|
[Programmers] Lv.0 | 안전지대 | Java (0) | 2025.09.30 |
[Programmers] Lv.0 | 외계어 사전 | Java (0) | 2025.09.27 |
[Programmers] Lv.0 | 저주의 숫자 3 | Java (0) | 2025.09.26 |
[Programmers] Lv.0 | 평행 | Java (0) | 2025.09.26 |
댓글