알고리즘 문제풀이/백준
[백준 4153] 직각삼각형
선서니
2023. 1. 27. 16:28
4153번: 직각삼각형
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
www.acmicpc.net
주어진 세 변의 길이로 삼각형이 직각 삼각형인지 판단하면 되기 때문에 피타고라스의 정리를 사용했다.
이 때, 입력으로 주어지는 세 변의 길이 중 어느 것이 가장 긴 변(빗변)인지 모르기 때문에 입력 중에서 이 부분을 처리해줘야 한다.
주의 할 점
- 길이가 가장 긴 변이 몇 번째에 있는지 모르기 때문에 가장 길이가 긴 변 찾기
- 0 0 0이 입력 되기 전까지 계속 반복하면서 입력 받기
1. BufferedReader로 입력 받기
BufferedReader로 입력을 받고 StringTokenizer로 공백으로 구분해서 각각 변의 길이를 가져온다.
BufferedReader로 받으면 문자열로 받아지기 때문에 Integer.parseInt()
를 통해서 int로 바꿔줘야 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
2. 가장 긴 변 찾기 & 피타고라스 정리 사용
삼각형의 세 변을 각각 a, b, c(빗변)이라고 했을 때
a^2 + b^2 = c^2가 성립하면 이 삼각형은 직각삼각형이라고 할 수 있다.
이를 위해 가장 긴 변(빗변)의 제곱을 저장할 변수와 나머지 두 변의 제곱의 합을 저장할 변수를 생성해 각 값을 저장했다.
int max = 0; // 빗변 제곱 저장할 변수
int sum = 0; // 빗변 제외한 나머지 두 변의 각 제곱의 합 저장할 변수
while(a != 0 && b != 0 && c != 0) { // 마지막 입력이 아닐동안 계속 반복
if(b < a && c < a) { // a 입력 값이 가장 큰 경우
max = a*a;
sum = b*b + c*c;
}
else if(a < b && c < b) { // b 입력 값이 가장 큰 경우
max = b*b;
sum = a*a + c*c;
}
else if(a < c && b < c) { // c 입력 값이 가장 큰 경우
max = c*c;
sum = a*a + b*b;
}
// 빗변 제곱과 빗변 제외 나머지 두 변의 각 제곱의 합이 같으면 직각삼각형 o, 아니면 직각삼각형 x
System.out.println((sum == max) ? "right" : "wrong");
// 다음 입력 받기 & 각 입력값 공백으로 파싱
st = new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
}
3. 전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B4153 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int max = 0;
int sum = 0;
while(a != 0 && b != 0 && c != 0) {
if(b < a && c < a) {
max = a*a;
sum = b*b + c*c;
}
else if(a < b && c < b) {
max = b*b;
sum = a*a + c*c;
}
else if(a < c && b < c) {
max = c*c;
sum = a*a + b*b;
}
System.out.println((sum == max) ? "right" : "wrong");
st = new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
}
}
}