본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 4153번 : 직각삼각형

by hyunipad 2021. 10. 17.
반응형

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

 

4153번: 직각삼각형

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

www.acmicpc.net

피타고라스 공식에 의해 직각삼각형은 아래의 공식을 따릅니다.

  • 제일 긴 변의 제곱 = 나머지 변의 제곱의 합

아래의 예제 입력과 같이 마지막의 세 개의 숫자가 0 0 0일 때, 프로그램을 종료합니다.

이 문제의 포인트는 단순히 직각삼각형이 맞는지 아닌지의 판단보다

입력으로 받은 세 변 중 가장 긴 변을 어떻게 뽑아내는지가 포인트인 문제입니다.

 

단순히 Math.max()를 통해 최댓값을 알아낸다 하더라도

다시 세 변중 최댓값을 제외한 나머지 두 변을 뽑아내야 하기 때문에 비교를 여러 번 해야 해서 코드가 길어집니다.

 

따라서 저는 배열안에 요소를 비교한 후 스왑을 통해 내림차순으로 정리를 해주었습니다.

 

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

public class Main {

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

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		while (true) {
			String[] xyz = br.readLine().split(" ");
			if(xyz[0].equals("0") && xyz[1].equals("0") && xyz[2].equals("0")) {
				break;
			}

			for (int i = 0; i < 2; i++) {
				for(int y = i + 1; y < 3; y++) {
					if(Integer.parseInt(xyz[i]) < Integer.parseInt(xyz[y])) {
						String temp = xyz[i];
						xyz[i] = xyz[y];
						xyz[y] = temp;
					}
				}
			}
			
			int z = Integer.parseInt(xyz[0]);
			int x = Integer.parseInt(xyz[1]);
			int y = Integer.parseInt(xyz[2]);
			
			if(Math.pow(z, 2) == Math.pow(x, 2) + Math.pow(y, 2)) {
				bw.write("right" + "\n");
			}else {
				bw.write("wrong" + "\n");
			}
		}

		br.close();
		bw.flush();
		bw.close();
	}
}

 

반응형

댓글