Question
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인 것을 알아냈다.
주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
Input
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다.
각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
Ouput
각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
Answer
# 개념 및 주의사항
이 문제에서 주의해야 하는 것은 3가지 있습니다.
1, 입력은 여러번 받을 수 있으며 0 0 0을 입력할 시 종료
2. 공백으로 나누어진 3개의 입력 값중 가장 큰 값은 빗변 c로 사용하기
3. 피타고라스의 정리를 이용하여 직각삼각형이 맞는지 확인하기
💡 피타고라스의 정리
직각삼각형에서 직각을 낀 두 변의 길이를 각각 a, b / 빗변의 길이를 c라 하면 a² + b² = c² 이 성립한다.
# 문제 풀이
1. while(true)로 무한 반복
2. 한줄을 읽고 공백으로 나눠 int 배열에 저장
피타고라스 계산을 편리하게 하기 위해 미리 num² 해 저장
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr = new int[3];
for (int i = 0; i < arr.length; i++) {
int num = Integer.parseInt(st.nextToken());
arr[i] = num * num;
}
3. 배열 정렬하기
a : arr[0]
b : arr[1]
c : arr[2]
직각삼각형의 a b c를 저장된 배열로 표현하면 위와 같이 사용할 건데
❓ 만약 입력받은 값이 6 8 10이 아니라 8 10 6 이면 저장된 값으로 a² + b² = c² 성립이 안되겠죠?
그래서 배열을 정렬하여 가장 큰 값이 arr[2]에 저장되도록 하는 것입니다.
Arrays.sort(arr);
4. 반복문 종료
0 0 0을 입력했을 때 반복 멈추기
if (arr[0] + arr[1] + arr[2] == 0) {
break;
}
5. 결과 출력
저장된 배열은 제곱한 값이 들어있고 정렬된 상태
즉 arr[0] + arr[1] 한 값이 arr[2] 값과 동일하면 직각삼각형
String result = "wrong";
if (arr[0] + arr[1] == arr[2]) {
result = "right";
}
System.out.println(result);
# 전체 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr = new int[3];
for (int i = 0; i < arr.length; i++) {
int num = Integer.parseInt(st.nextToken());
arr[i] = num * num;
}
Arrays.sort(arr);
if (arr[0] + arr[1] + arr[2] == 0) { break; }
String result = "wrong";
if (arr[0] + arr[1] == arr[2]) {
result = "right";
}
System.out.println(result);
}
}
}
Result
메모리 (KB) | 시간 (ms) |
11572 | 64 |
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 / JAVA] [B3 / 2884] 알람 시계 (0) | 2024.08.05 |
---|---|
[백준 / JAVA] [B5 / 2475] 검증수 (1) | 2024.07.03 |
[백준 / JAVA] [B2 / 2675] 문자열 반복 (0) | 2024.06.28 |
[백준 / JAVA] [B3 / 2562] 최댓값 (0) | 2024.06.28 |
[백준 / JAVA] [S5 / 2751] 수 정렬하기2 (0) | 2024.06.28 |