https://www.acmicpc.net/problem/4153
4153번: 직각삼각형
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
www.acmicpc.net
문제
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
입력
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
출력
각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
첫 번째 시도
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> st = new ArrayList<>();
while (true) {
String a[] = br.readLine().split(" ");
int a1 = Integer.parseInt(a[0]);
int a2 = Integer.parseInt(a[1]);
int a3 = Integer.parseInt(a[2]);
int temp = 0;
if (a1 > a2) {
temp = a1;
a1 = a2;
a2 = temp;
if (a2 <= a3) {
} else if (a2 > a3) {
temp = a2;
a2 = a3;
a3 = temp;
}
} else if (a1 <= a2) {
if (a2 > a3) {
temp = a2;
a2 = a3;
a3 = temp;
} else if (a2 <= a3) {
}
}
if (!(a1 == 0 && a2 == 0 && a3 == 0) && (a1 + a2 >= a3) && ((a1 * a1) + (a2 * a2) == a3 * a3)) {
st.add("right");
} else if (!(a1 == 0 && a2 == 0 && a3 == 0) && !((a1 + a2 >= a3) && ((a1 * a1) + (a2 * a2) == a3 * a3)))
st.add("wrong");
else if (a1 == 0 && a2 == 0 && a3 == 0)
break;
}
for (int i = 0; i < st.size(); i++) {
System.out.println(st.get(i));
}
}
}
해결 방법
- 삼각형의 주어진 각 세 변을 길이 순으로 정렬한 뒤 작은 두 변의 합이 가장 큰 변의 길이보다 길고, 작은 두 변의 제곱이 가장 긴 변의 길이의 제곱과 같을 때 right를 출력했다.
어려웠던 점 / 고쳐야할 점
- 초기에 정렬이 없이 계산하여 오류가 발생했다.
반응형
'알고리즘 문제 풀이 (Problem Solving)' 카테고리의 다른 글
| [Problem Solving/Java] 백준 2292번 - 벌집 (1) | 2024.01.02 |
|---|---|
| [Problem Solving/Java] 백준 1002번 - 터렛 (1) | 2024.01.02 |
| [Problem Solving/Java] 백준 3009번 - 네 번째 점 (1) | 2024.01.02 |
| [Problem Solving/Java] 백준 1085번 - 직사각형에서 탈출 (0) | 2024.01.02 |
| [Problem Solving/Java] 백준 4948번 - 베르트랑 공준 (2) | 2024.01.02 |