본문 바로가기
알고리즘 문제풀이/백준

[백준 4153] 직각삼각형

by 선서니 2023. 1. 27.

[문제 바로가기]

 

4153번: 직각삼각형

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

www.acmicpc.net

 

 

주어진 세 변의 길이로 삼각형이 직각 삼각형인지 판단하면 되기 때문에 피타고라스의 정리를 사용했다.

이 때, 입력으로 주어지는 세 변의 길이 중 어느 것이 가장 긴 변(빗변)인지 모르기 때문에 입력 중에서 이 부분을 처리해줘야 한다.

 

주의 할 점

  • 길이가 가장 긴 변이 몇 번째에 있는지 모르기 때문에 가장 길이가 긴 변 찾기
  • 0 0 0이 입력 되기 전까지 계속 반복하면서 입력 받기

 

1. BufferedReader로 입력 받기

BufferedReader로 입력을 받고 StringTokenizer로 공백으로 구분해서 각각 변의 길이를 가져온다.

BufferedReader로 받으면 문자열로 받아지기 때문에 Integer.parseInt()를 통해서 int로 바꿔줘야 한다.

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()); 

int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());

 

2. 가장 긴 변 찾기 & 피타고라스 정리 사용

삼각형의 세 변을 각각 a, b, c(빗변)이라고 했을 때

a^2 + b^2 = c^2가 성립하면 이 삼각형은 직각삼각형이라고 할 수 있다.

이를 위해 가장 긴 변(빗변)의 제곱을 저장할 변수와 나머지 두 변의 제곱의 합을 저장할 변수를 생성해 각 값을 저장했다.

 

int max = 0; // 빗변 제곱 저장할 변수
int sum = 0; // 빗변 제외한 나머지 두 변의 각 제곱의 합 저장할 변수

while(a != 0 && b != 0 && c != 0) { // 마지막 입력이 아닐동안 계속 반복
    if(b < a && c < a) { // a 입력 값이 가장 큰 경우
        max = a*a;
        sum = b*b + c*c;
    }
    else if(a < b && c < b) { // b 입력 값이 가장 큰 경우
        max = b*b;
        sum = a*a + c*c;
    }
    else if(a < c && b < c) { // c 입력 값이 가장 큰 경우
        max = c*c;
        sum = a*a + b*b;
    }

    // 빗변 제곱과 빗변 제외 나머지 두 변의 각 제곱의 합이 같으면 직각삼각형 o, 아니면 직각삼각형 x        
    System.out.println((sum == max) ? "right" : "wrong"); 

    // 다음 입력 받기 & 각 입력값 공백으로 파싱
    st = new StringTokenizer(br.readLine()); 
    a = Integer.parseInt(st.nextToken());
    b = Integer.parseInt(st.nextToken());
    c = Integer.parseInt(st.nextToken());
}

 

3. 전체 코드

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

public class B4153 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()); 
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        int max = 0;
        int sum = 0;        

        while(a != 0 && b != 0 && c != 0) {
            if(b < a && c < a) {
                max = a*a;
                sum = b*b + c*c;
            }
            else if(a < b && c < b) {
                max = b*b;
                sum = a*a + c*c;
            }
            else if(a < c && b < c) {
                max = c*c;
                sum = a*a + b*b;
            }

            System.out.println((sum == max) ? "right" : "wrong");

            st = new StringTokenizer(br.readLine()); 
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
            c = Integer.parseInt(st.nextToken());
        }
    }

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 1187] 단어 정렬  (0) 2023.01.30
[백준 14891] 톱니바퀴  (0) 2023.01.28
[백준 1157] 단어 공부  (0) 2023.01.25
[백준 2475] 검증수  (0) 2023.01.25
[백준 2675] 문자열 반복  (0) 2023.01.24

댓글