[java] 백준 5073번 삼각형과 세 변알고리즘/백준2021. 8. 9. 13:11
Table of Contents
간단하게 요약하자면
- Equilateral : 세 변의 길이가 모두 같은 경우
- Isosceles : 두 변의 길이만 같은 경우
- Scalene : 세 변의 길이가 모두 다른 경우
- Invalid : 주어진 세 변의 길이가 삼각형의 조건을 만족하지 못하는 경우(가장 긴 변 >= 나머지 두변의 합)
입력이 0 0 0이 들어가지 않는 이상 계속 돌게 만들어야된다.
가장 긴 변 같은 경우 세 변을 입력받고 가장 큰 값을 긴 변으로 생각하여 변수(max)를 만들어주면 되고
나머지는 비교 연사자를 쓰면 풀 수 있는 문제이다.
여담) 처음에 쓴 코드다. (당연히 틀렸다..)
if (arr[0] == arr[1] && arr[1] == arr[2])
System.out.println("Equilateral");
else if (arr[0] == arr[1] || arr[1] == arr[2] || arr[2] == arr[0])
System.out.println("Isosceles");
else if (max < arr[0] + arr[1] && max < arr[1] + arr[2] && max < arr[0] + arr[2])
System.out.println("Scalene");
else
System.out.println("Invalid");
처음에는 왜 안됄까 생각을 했다.
반례가 있었다 입력이 (2, 2 ,4) 같은 게 들어올 때 조건이 되지 않는 삼각형(Invalid)이 나오는 게 정상인데 두 변이 같으니 이등변 삼각형이라고 나온 것이다.
그래서 조건을 추가해주고 다시 돌렸더니 성공!
조건문은 위에서부터 아래로 순차적으로 돌아가기 때문에 반례가 있다면 꼭 조심해야 한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[3];
int max;
while (true) {
arr[0] = sc.nextInt();
arr[1] = sc.nextInt();
arr[2] = sc.nextInt();
if (arr[0] == 0 && arr[1] == 0 && arr[2] == 0) {
break;
}
max = -1;
for (int j : arr) {
if (max < j) {
max = j;
}
}
if (arr[0] == arr[1] && arr[1] == arr[2])
System.out.println("Equilateral");
else if (max >= arr[0] + arr[1] || max >= arr[1] + arr[2] || max >= arr[0] + arr[2])
System.out.println("Invalid");
else if (arr[0] == arr[1] || arr[1] == arr[2] || arr[2] == arr[0])
System.out.println("Isosceles");
else if (max < arr[0] + arr[1] && max < arr[1] + arr[2] && max < arr[0] + arr[2])
System.out.println("Scalene");
else
System.out.println("Invalid");
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[java] 백준 2765번 자전거와 속도 (0) | 2021.08.10 |
---|---|
[java] 백준 2523번 별 찍기 - 13 (6) | 2021.08.09 |
[java] 백준 1252번 이진수 덧셈 (11) | 2021.08.08 |
[java] 백준 10826번 피보나치 수 4 (12) | 2021.08.08 |
[java] 백준 2748번 피보나치 수 2 (0) | 2021.08.08 |
@펄찌 :: Pearl's Story
펄의 일상이 궁금한 사람 요기~
즐거운 하루 되셨으면 좋겠습니다😊