백준 BaekJoon 7510번: 고급 수학 [Java] 자바

2020-11-14


문제

준규는 집을 짓고 있다. 준규는 모든 벽 모양을 직각 삼각형으로 만들려고 한다. 적절히 나무를 잘라 삼각형을 만들었지만, 준규는 각도를 측정할 수 있는 도구를 가지고 있지 않다. 어쩔 수 없이 줄자를 이용해 삼각형 세 변의 길이를 측정한 다음, 직각 삼각형인지 아닌지를 알아보려고 한다.

삼각형 세 변의 길이가 주어졌을 때, 직각 삼각형인지 아닌지를 구하는 프로그램을 작성하시오.

입력

입력의 첫째 줄에는 테스트 케이스의 개수 n이 주어진다. 각 테스트 케이스는 세 정수 1 ≤ a, b, c ≤ 40000 으로 이루어져 있다. 세 정수는 삼각형 각 변의 길이를 나타낸다.

출력

각 테스트 케이스마다 "Scenario #i:"를 출력한다. i는 테스트 케이스 번호이며, 1부터 시작한다. 그 다음 줄에는 입력으로 주어진 삼각형이 직각 삼각형인 경우에는 "yes", 아닌 경우에는 "no"를 출력한다. 각 테스트 케이스 사이에는 빈 줄을 하나 출력한다.


풀이

피타고라스의 정의만 알면 쉽게 풀수 있다.

※가장 긴변의 제곱은 다른 두변의 제곱의 합과 같다.

import java.util.Scanner;

public class TemplateA {
		public static void main(String[] args)  {
			Scanner scan = new Scanner(System.in);			
			int Tcase = scan.nextInt();			
			int [] arr = new int[3];
			int Tn = 0;
			//출력횟수 넣어줄 변수
			
			for(int i = 0; i < Tcase; i++) {
				int [] temp = new int[3];
				//가장 큰 변을 제외한 나머지가 들어갈 배열
				int count = 0;
				//temp 배열 위치 지정 변수
				int max = 0;
				//최대 변 길이 들어갈 변수
				for(int j = 0; j < arr.length; j++) {
					arr[j] = scan.nextInt();
					if(max < arr[j]) {
						max = arr[j];
					}

				}
			
			for(int l = 0; l < arr.length; l++) {
				if(arr[l] != max) {
					temp[count] = arr[l];
					count++;	
				}
			}
				//max가 이닌 나머지 변을 temp에 넣어줌
				
			int sum = 0;
			for(int k = 0; k < temp.length; k++) {
				sum += Math.pow(temp[k], 2);
			}
			//짧은 두변 제곱합 구해줌
			
			Tn++;
			if(Math.pow(max, 2) == sum) {
				System.out.println("Scenario #"+ Tn + ":");
				System.out.println("yes");
			}else {
				System.out.println("Scenario #"+ Tn + ":");
				System.out.println("No");
			}
			//가장 긴변 제곱과 같은지 체크 해줌
		}
	}

}

 

출처링크: www.acmicpc.net/problem/7510

 

7510번: 고급 수학

각 테스트 케이스마다 "Scenario #i:"를 출력한다. i는 테스트 케이스 번호이며, 1부터 시작한다. 그 다음 줄에는 입력으로 주어진 삼각형이 직각 삼각형인 경우에는 "yes", 아닌 경우에는 "no"를 출력

www.acmicpc.net