본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 4153번 자바 문제 답/해설(직각삼각형 문제)

by 리드민 2021. 12. 30.
반응형

[1] 백준 카테고리

단계별로 풀어보기

기본 수학2

9단계 4153번 문제

직각삼각형

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


[2] 문제

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


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

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

3. 예제 입력 1
6 8 10
25 52 60
5 12 13
0 0 0


4. 예제 출력 1
right
wrong
right


[3] 정답
1. 정답 해설 미포함

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
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*a+b*b)==c*c)
			{
				System.out.println("right");
			}
			else if((a*a+c*c)==b*b)
			{
				System.out.println("right");
			}
			else if((b*b+c*c)==a*a)
			{
				System.out.println("right");
			}
			else
			{
				System.out.println("wrong");
			}
			
		}
	}
}


2. 정답 해설 포함

import java.io.BufferedReader;
/* BufferedReader 사용을 위해서 java.io.BufferedReader 클래스를 impot 한다.
Enter를 경계로 인식하고 받은 데이터는 String으로 고정된다*/
import java.io.InputStreamReader;
/* byte 단위 데이터를 문자 단위 데이터로 처리할 수 있도록 변환해주기 위해서
InputStreamReader를 사용한다.
InputStreamReader 사용을 위해서 java.io.InputStreamReader 클래스를 import 한다.*/
import java.io.IOException;
/* 예외 처리를 위해서 IOException 사용한다.
IOException 사용을 위해서 java.io.IOException 클래스를 import 한다.*/
import java.util.StringTokenizer;
/* 공백 단위로 호출하기 위해서 StringTokenizer를 사용한다
StringTokenizer를 사용하기 위해서
StringTokenizer java.util.String 클래스를 import 한다.*/

public class Main {
// 접근제어자 public으로 Main 클래스를 선언한다.
	public static void main(String[] args) throws IOException{
	// 접근제어자 public으로 메모리에 상주하고 리턴값이 없이 main 함수를 선언한다.
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//BufferedReader 객체 br를 선언한다.

		while(true){
		// while문을 선언한다 (true)므로 break문이 나오기 전까지 무한 반복하게 된다.
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			// StringTokenizer 객체 st를 선언한다 이제 공백으로 값을 입력받을 수 있다.

			int a = Integer.parseInt(st.nextToken());
			/* int형 변수 a를 선언하고 값을 공백 단위로 구분해서 입력받는다.
			Inter.parseInt()로 String 변수를 int형으로 변환시킨다.*/
			int b = Integer.parseInt(st.nextToken());		
			/* int형 변수 b를 선언하고 값을 공백 단위로 구분해서 입력받는다.
			Inter.parseInt()로 String 변수를 int형으로 변환시킨다.*/
			int c = Integer.parseInt(st.nextToken());
			/* int형 변수 c를 선언하고 값을 공백 단위로 구분해서 입력받는다.
			Inter.parseInt()로 String 변수를 int형으로 변환시킨다.*/


			if(a==0 && b==0 && c==0) {
			// 변수 a 값이 0이고 b값이 0이면서 c값이 0일때 괄호안의 코드가 실행된다.
				break;
				// while문을 빠져나온다.
			}
			
			if((a*a+b*b)==c*c)
			// a*a+b*b값이 c*c와 같을 때 괄호안의 코드가 실행된다.
			{
				System.out.println("right");
				// right 문자열이 출력된다.
			}
			else if((a*a+c*c)==b*b)
			// a*a+c*c 값이 b*b와 같을 때 괄호안의 코드가 실행된다.
			{
				System.out.println("right");
				// right 문자열이 출력된다.
			}
			else if((b*b+c*c)==a*a)
			// b*b+c*c 값이 a*a와 같을 때 괄호안의 코드가 실행된다.
			{
				System.out.println("right");
				// right 문자열이 출력된다.
			}
			else
			// 모두 해당되지 않을 때 괄호안의 코드가 실행된다.
			{
				System.out.println("wrong");
				// wrong 문자열이 출력된다.
			}
			
		}
	}
}

 

피타고라스 정리를 이용해서 풀어주면된다.

			if((a*a+b*b)==c*c)
			{
				System.out.println("right");
			}
			else if((a*a+c*c)==b*b)
			{
				System.out.println("right");
			}
			else if((b*b+c*c)==a*a)
			{
				System.out.println("right");
			}
			else
			{
				System.out.println("wrong");
			}

피타고라스 정리 알고리즘이다. 어느 변수가 대각선인지 가로인지 세로인지 모르기 때문에 3가지 케이스를 각각 비교해 보아야 된다.

반응형