새소식

알고리즘 문제풀이/BOJ

[수학] 백준 1297번 TV 크기 자바(java) 풀이

  • -

BOJ 1297번 TV 크기 자바(java) 풀이

오랜만에 풀어보는 브론즈 문제입니다.
요즘 서류 쓰냐고 바빠서 알고리즘을 풀지 못하고 있는데요
그래도 1일 1커밋 하고 싶어서 쉬운거라도 찾아서 풀어봤습니다~~

문제 정리

  1. TV의 대각선 길이, 높이와 너비의 비율이 주어질때 실제 높이와 너비의 길이를 구하여라
  2. 만약, 실제 TV의 높이나 너비가 소수점이 나올 경우에는 그 수보다 작으면서 가장 큰 정수로 출력한다.


문제 풀이

이 문제는 피타고라스의 정리를 알면 간단히 풀 수 있는 문제입니다.
피타고라스의 정리를 바탕으로 방정식을 세우고 해를 구하면 됩니다.

피타고라스의 정리
c^2 = a^2 + b^2 (단 c는 빗변)

빗변은 대각선의 길이가 되고 a와 b는 높이와 너비가 됩니다.
식을 세우면 다음과 같습니다.
대각선의 길이^2 = (너비x)^2 + (높이x)^2 정리하면
x = sqrt(대각선의길이^2 / ( (너비x)^2 + (높이x)^2 ))
이제 x를 구했으니 너비와 높이에 각각 곱해주면 너비와 높이를 구할 수 있습니다.
단!!! 나온 값에 가우스 즉 floor를 취하여야 합니다.
floor를 취한 다음 소수점을 출력하지 않기 위해 int형으로 typecast하여 출력합니다.

문제 풀이

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] temp = br.readLine().split(" ");

        // width > height
        int diagonal = Integer.parseInt(temp[0]);
        int height = Integer.parseInt(temp[1]);
        int width = Integer.parseInt(temp[2]);

        // 높이와 너비를 구하기
        // 소수점이 나올 경우, 그 수보다 작으면서 가장 큰 정수 출력 (floor)
        double res = Math.sqrt(Math.pow(diagonal, 2) / ( Math.pow(height, 2) + Math.pow(width, 2) ));
        System.out.print((int)Math.floor(res*height) + " ");
        System.out.println((int)Math.floor(res*width));
    }
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.