jyamethyst21 님의 블로그

백준 1297번- 'TV 크기' (PYTHON 풀이) 본문

CODING 💻

백준 1297번- 'TV 크기' (PYTHON 풀이)

jyamethyst21 2026. 2. 13. 00:02

문제:

 

TV의 대각선 길이, 높이 비율, 너비 비율을 한 줄에 입력받고, 첫째 줄에 TV의 높이와 너비를 공백을 기준으로 출력한다.

만약, 실제 높이나 너비가 소수점이 나올 경우에는 그 수보다 작으면서 가장 큰 정수로 출력하면 된다.

 

풀이:

import math

D, H, W = map(int,input().split())
k = D / math.sqrt(H*H + W*W)
print(int(H * k), int(W * k))

문제는 TV의 대각선 길이와 세로:가로 비율이 주어질 때 실제 세로, 가로 길이를 구하는 문제이다.

이때 세로:가로는 서로의 관계를 나타내는 값이므로 실제 값을 구하기 위해서는 배율 k를 곱해주어야 한다.

그래서 실제 세로를 수식으로 나타내면 kH, 가로를 나타내면 kW라고 볼 수 있다.

이 k의 값을 구하는 것이 문제의 관건인데, 대각선 길이가 주어졌기 때문에 이를 활용해서 식을 구할 수 있다.

 

중학생 때 피타고라스 정의를 배운 것으로 기억한다. 이는 (가로^2 * 세로^2 = 대각선^2) 이다. 즉, 직각삼각형에서 가로 길이의 제곱과 세로 길이의 제곱을 더하면 빗변인 대각선의 제곱과 동일하다는 정의이다. 해당 문제는 TV 길이를 구하는 문제이고, TV는 직사각형 모양이므로 가로, 세로, 대각선을 기준으로 보면 직각삼각형 모양이라 이 정의를 사용할 수 있게 된다.

 

앞서 말한 정의를 활용하면 다음과 같이 값이 전개된다.

(kW)^2 + (kH)^2 = D^2
k^2W^2 + k^2H^2 = D^2
k^2(W^2+H^2) = D^2 -> k^2로 묶는다.
k^2 = D^2 / W^2 + H^2 -> 양변을 W^2 + H^2로 묶는다.
k = D / 루트 W^2 + H^2 -> 양변에 제곱근을 취해서 k값을 구한다.

이 과정을 통해 k값을 구했기 때문에 이제 입력받은 비율과 배율인 k를 곱해서 출력하면 된다.

문제에서 실제 높이나 너비가 소수점이 나올 경우에는 그 수보다 작으면서 가장 큰 정수로 출력하면 된다고 했기 때문에 int를 활용해서 정수 형태로 만들어서 출력하면 문제를 풀 수 있다.