직각삼각형

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 34277 17989 16187 52.542%

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

출력

각 입력에 대해 직각 삼각형이 맞다면 “right”, 아니라면 “wrong”을 출력한다.

예제 입력 1 복사

1
2
3
4
6 8 10
25 52 60
5 12 13
0 0 0

sun cloud

해설

세 변의 길이를 통해 직각삼각형인지 판단하는 문제입니다.

피타고라스의 정리를 사용해서 접근해보겠습니다.

가장 큰 변의 제곱이 나머지 두 변의 제곱의 합과 같다면 직각 삼각형이기에 right을 출력하도록 하고 이 과정을 반복하되 세 변의 길이가 모두 0이 입력된다면 프로그램을 종료하도록 합니다.

첫번째 풀이는 단순하게 각 변의 길이를 비교하고, 가장 큰 변의 길이의 제곱이 다른 두 변의 제곱의 합과 같을 경우 “right”, 아닐 경우 “wrong”이 출력되도록 진행했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		while(true) {
			StringTokenizer st=new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			int c = Integer.parseInt(st.nextToken());
			if(a==0 && b==0 && c==0)break;
			if(a > b && a > c) {
				isARightTriangle(a,b,c);
			}else if( b > a && b > c) {
				isARightTriangle(b,a,c);
			}else {
				isARightTriangle(c,a,b);
			}
		}
	}
	public static void isARightTriangle(int a, int b, int c) {
		if(a*a == b*b + c*c) {
			System.out.println("right");
		}else {
			System.out.println("wrong");
		}
	}
}

두 번째 풀이입니다.

알고리즘 스터디를 함께 하고 있는 김선생님의 코드를 참고했습니다.

Math 인터페이스의 max() 메서드를 사용해서 가장 큰 값을 구합니다

그런데 가장 큰 값을 특정하기 어렵기에 각 변의 제곱을 모두 더한 값과 가장 큰 값의 제곱의 두 배와 비교했습니다.

삼항연산자를 사용하면 코드를 더욱 줄일 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		while(true) {
			StringTokenizer st=new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			int c = Integer.parseInt(st.nextToken());
			if(a==0 && b==0 && c==0) break;
			int max = Math.max(a, Math.max(b, c));
			System.out.println(a*a + b*b + c*c == 2*max*max ? "right":"wrong");
		}
	}
}

BOJ 카테고리 내 다른 글 보러가기

댓글남기기