삼각형 변의 조건식에 &&을 써야 하는 이유
삼각형 변의 조건식에 &&을 써야 하는 이유
문제 4: 삼각형 유효성 검사
세 변의 길이를 입력받아 삼각형을 만들 수 있는지 검사하세요.
삼각형 조건:
- 세 변의 길이가 모두 양수
- 가장 긴 변 < 나머지 두 변의 합
입력:
1
int a = 3, b = 4, c = 5;
예상 출력:
1
삼각형을 만들 수 있습니다.
두번째 조건식에 && 연산자가 아닌 || 연산자를 썼을 경우 로직 오류:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("a변의 길이 입력: ");
int a = sc.nextInt();
System.out.print("b변의 길이 입력: ");
int b = sc.nextInt();
System.out.print("c변의 길이 입력: ");
int c = sc.nextInt();
boolean valid = (a>0&&b>0&&c>0) && ((a+b)>c||(b+c)>a||(a+c)>b);
if (valid) {
System.out.println("삼각형을 만들 수 있습니다");
} else System.out.println("삼각형을 만들 수 없습니다");
}
1
2
3
4
a변의 길이 입력: 1
b변의 길이 입력: 2
c변의 길이 입력: 3
삼각형을 만들 수 있습니다
- 2번째 조건에 부합하지 않기 때문에 삼각형을 만들 수 없다고 나와야 하는데 만들 수 있다고 나옴. 가장 긴 변이 a일 수도 b일수도 c일 수도 있다고 생각 함.
- 하지만 이 조건은 “세 변 중 어느 하나라도 이 조건을 만족하면 된다”가 아니라, 세 변 전체가 동시에 삼각형을 이룰 수 있는 하나의 완전한 조합이어야 하기 때문
“가장 긴 변이 무엇이든 간에, 그 ‘가장 긴 변’은 반드시 나머지 두 변의 합보다 작아야 한다.” -> 모든 조합에서 이 부등식이 유지되어야 함
e.g. :
1
a=1, b=2, c=3
OR 조건:
1
(a+b>c) || (a+c>b) || (b+c>a)
계산하면:
1
2
3
(1+2>3) → false
(1+3>2) → true
(2+3>1) → true
false true true → true
- 그래서 삼각형이 된다고 출력 ❌
하지만 실제로는 세 변이 일직선이라 삼각형 불가능
🔹 올바른 조건 (AND)
삼각형은 세 변이 모두 서로 맞물려야만 완성되기 때문에, 세 부등식이 전부 동시에 참이어야 한다 👇
1
(a+b>c) && (a+c>b) && (b+c>a)
위 조건이면:
1
2
3
4
(1+2>3) → false
(1+3>2) → true
(2+3>1) → true
false && true && true → false
삼각형 불가능 ✅
OR → “하나라도 맞으면 통과” → 세 변 중 일부만 조건을 만족해도 OK → ❌ 잘못된 판단
AND → “모두 맞아야 통과” → 세 변이 실제로 삼각형을 형성해야 함 → ✅ 올바른 판단
This post is licensed under CC BY 4.0 by the author.