1 minute read




문제 풀이


이번 문제는 피타고라스 정리의 개념만 알고 있다면 큰 문제없이 풀 수 있을 것이다.

피타고라스의 정리란?
직각을 낀 두변의 길이를 a, b라고 하고, 빗변의 길이를 c라고 했을 때 a^2 + b^2 = c^2가 성립된다.

문제에서 유의할 점은 a, b, c의 위치가 특정되지 않았기에 별도로 정렬을 해야한다.

아이디어 도출

  • 공백을 기준으로 세 변의 길이값을 입력받아 배열에 저장한다.
  • 빗변의 길이가 가장 긴게 c이기에 배열을 오름차순으로 정렬하여 작은 값부터 큰 값 순서대로 a, b, c로 정한다.
  • 피타고라스 정리 공식을 활용해 직각삼각형 여부를 판단한다.


주어지는 세 변의 길이 중 가장 긴 길이를 c로 정한다면 피타고라스 정리 공식을 이용해 직각삼각형 여부를 알 수 있다.
바로 코드를 작성해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while(true) {
    StringTokenizer st = new StringTokenizer(br.readLine());
    int[] arr = new int[3];
    for(int i=0; i<arr.length; i++) {
        arr[i] = Integer.parseInt(st.nextToken());
    }
    Arrays.sort(arr);

    int a = arr[0];
    int b = arr[1];
    int c = arr[2];

    if(a==0 && b==0 && c==0) break;
    
    if(Math.pow(a, 2) + Math.pow(b, 2) == Math.pow(c, 2)) bw.write("right"+"\n");
    else bw.write("wrong"+"\n");
}

공백을 기준으로 한 줄에 세 변의 길이를 입력받아 배열에 저장하고 해당 배열을 오름차순으로 정렬한 뒤 순서대로 a, b, c에 대입한다.
그리고 피타고라스 정리 공식 a^2 + b^2 = c^2을 적용하여 주어진 삼각형이 직각삼각형인지 판단하여 맞다면 “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
import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        while(true) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int[] arr = new int[3];
            for(int i=0; i<arr.length; i++) {
                arr[i] = Integer.parseInt(st.nextToken());
            }
            Arrays.sort(arr);

            int a = arr[0];
            int b = arr[1];
            int c = arr[2];

            if(a==0 && b==0 && c==0) break;
            
            if(Math.pow(a, 2) + Math.pow(b, 2) == Math.pow(c, 2)) bw.write("right"+"\n");
            else bw.write("wrong"+"\n");
        }

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

회고

  • 주어진 세 변의 길이가 특정되지 않았기에 배열 정렬을 활용해 세 변 a, b, c를 정하여 직각삼각형 여부를 알아낼 수 있었다.

출처

  • 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.