알고리즘 연습

[4153번] 직각삼각형 - Java

밀깜 2021. 11. 9. 21:11

https://www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

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

www.acmicpc.net

 

1. 배운점

- 직각삼각형을 구하는 공식을 활용한다.(가장 긴 변의 제곱 = 나머지 두 변의 제곱의 합)

- 경우의 수를 나누어 값이 어떤 순서로 들어와도 가장 긴 변을 가려낼 수 있도록 한다.

 

2. 개선할 점

 

3. 궁금한 점

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {

		// import java.io.BufferedReader
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		while(true) {

			// 테스트 케이스 받기
			String [] caseNum = br.readLine().split(" ");
			int sideOne = Integer.parseInt(caseNum[0]);
			int sideTwo = Integer.parseInt(caseNum[1]);
			int sideThree = Integer.parseInt(caseNum[2]);

			// 반복문 종료 조건 : 0, 0, 0
			if (sideOne == 0) {
				break;
			}
			
			// 직각삼각형이 맞는지 출력
			System.out.println(isRightTriangle(sideOne, sideTwo, sideThree));
		}
	}
	
	// 직각삼각형 판별 메서드
	private static String isRightTriangle(int sideOne, int sideTwo, int sideThree) {
		// 기본값 right로 설정
		String message = "right";
		
		// 가장 크기가 큰 변 파악
		int max = sideOne;
		int num1 = 0;
		int num2 = 0;
		
		
		// 1번째 변이 max인 경우
		if(max >= sideTwo && max >= sideThree) {
			num1 = sideTwo;
			num2 = sideThree;
		} 
		
		// 2번째 변이 max인 경우
		else if (sideTwo > max && sideTwo >= sideThree) {
			max = sideTwo;
			num1 = sideOne;
			num2 = sideThree;
		} 
		
		// 3번째 변이 max인 경우
		else {
			max = sideThree;
			num1 = sideOne;
			num2 = sideTwo;
		}
		
		// 직각 삼각형이 아니라면 wrong 출력
		if ((max*max) != (num1*num1) + (num2*num2)) {
			message = "wrong";
		}
			
		return message;
	}
}