알고리즘/python

[백준/Python] 1297번: TV크기

minliz 2025. 4. 24. 17:31

목차

📝 문제

🎯 알고리즘 핵심 단계

✅ 실습 인증 파트_코드

⚡ 트러블 슈팅


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

📝 문제

김탑은 TV를 사러 인터넷 쇼핑몰에 들어갔다. 쇼핑을 하던 중에, TV의 크기는 그 TV의 대각선의 길이로 나타낸 다는 것을 알았다. 하지만, 김탑은 대각선의 길이가 같다고 해도, 실제 TV의 크기는 다를 수도 있다는 사실에 직접 TV를 보러 갈걸 왜 인터넷 쇼핑을 대각선의 길이만 보고 있는지 후회하고 있었다.

인터넷 쇼핑몰 관리자에게 이메일을 보내서 실제 높이와 실제 너비를 보내달라고 했지만, 관리자는 실제 높이와 실제 너비를 보내지 않고 그것의 비율을 보내왔다.

TV의 대각선 길이와, 높이 너비의 비율이 주어졌을 때, 실제 높이와 너비의 길이를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 TV의 대각선 길이 D, TV의 높이 비율 H, TV의 너비 비율 W이 공백 한 칸을 사이에 두고 주어진다.

 

출력

째 줄에 TV의 높이와 TV의 너비를 공백 한 칸을 이용해서 구분지은 후 출력한다. 만약, 실제 TV의 높이나 너비가 소수점이 나올 경우에는 그 수보다 작으면서 가장 큰 정수로 출력한다. (예) 1.7 -> 1


🎯 알고리즘

💡 문제 이해

  • 대각선 길이 D(실제 cm 단위)가 주어짐
  • 높이:너비의 비율 H:W도 주어짐
  • 비율을 유지하면서 실제 높이너비를 구하는 문제

📌 조건:

실제 높이² + 실제 너비 ² = D²
(피타고라스 정리 활용!)

 

💡 문제 접근

 

1. 비율 기반 피타고라스 공식 세우기

비례 상수 x를 곱해서 실제 길이로 만든다고 하면:

  • 높이 = H * x
  • 너비 = W * x
  • 공식:
     
    (H * x)² + (W * x)² = D²

2. 공식 정리해서 x 구하기

x = D / √(H² + W²)
 
 

3. 최종 길이 구하기

height = int(H * x) width = int(W * x)

※ 소수점 버리기 위해 int() 사용

 


✅ 실습 인증 _코드

import math
D, H, W = map(int, input().split(" "))

x = D / math.sqrt(H**2 + W**2)
height = int(H *x)
width = int(W*x)
print(height, width)

 


⚡ 트러블 슈팅

   문제 상황                                         원인                                                             해결 방법

❌ 반복문으로 정답 찾음 (x = 1부터 무한 증가) 정확한 수학 공식을 사용하지 않고 값부터 찾으려고 함. 피타고라스 정리를 기반으로 비례 상수 x를 수학적으로 계산
❌ math.sqrt() 사용이 어색하거나 생소함 sqrt() 함수가 어디에 필요한지 감이 안 잡힘 math.sqrt(H**2 + W**2) 는 대각선 비율을 계산하는 핵심 공식
❌ 소수점 계산 후 출력이 부정확함 소수점이 포함된 실수(float)를 그대로 출력하거나 반올림함 int()로 소수점 버림 처리 필수