[Python] 코딩 도장 - The Knights Of The Round Table

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: The Knights Of The Round Table] - Lv.2

아서 왕이 천장에 삼각형 창이 있는 방에 원탁을 놓을 계획을 세우고 있다.

그는 햇빛이 원탁 위에 비추게 하고 싶다.

특히 정오에 태양이 바로 머리 위에 있을 때는 원탁 전체에 햇빛이 비추도록 하려고 한다.

그래서 그 원탁은 방 안의 특정한 삼각형 영역 안에 자리잡아야 한다.

물론 아서 왕은 주어진 조건 내에서 최대한 큰 원탁을 만들고 싶어한다.

멀린이 점심을 먹으러 나간 사이에 해가 비추는 영역에 들어갈 수 있는 가장 큰 원탁의 반지름을 계산하는 프로그램을 만들어야 한다.

Input

테스트 케이스의 개수에는 제한이 없으며, 각 테스트 케이스마다 삼각형의 세 변의 길이를 나타내는 실수 세 개(a,b,c)가 입력된다.

어떤 변의 길이도 1,000,000을 넘지 않으며, max(a,b,c) ≤ (a+b+c)/2 라고 가정해도 된다.

파일 끝에 다다를 때까지 계속 입력을 받는다.

output

각 테스트 케이스마다 다음과 같은 결과를 출력한다.

The radius of the round table is: r

여기에서 r은 정오에 해가 비추는 영역에 들어갈 수 있는 원탁의 최대 반지름이며, 소수점 셋째 자리까지 반올림한 값을 출력한다.

Sample Input

12.0 12.0 8.0

Sample Output

The radius of the round table is: 2.828

출처: https://codingdojang.com/scode/442?answer_mode=hide


[풀이]

def cal_radius():
    a, b, c = [int(i) for i in input().split()]
    
    s = (a + b + c) / 2
    r = (s*(s-a)*(s-b)*(s-c))**0.5 / s
    
    return print(f"The radius of the round table is: {r:.3f}")

cal_radius()
12 12 8
The radius of the round table is: 2.828

우선 삼각형 영역 안에 자리잡은 최대 크기의 원은 삼각형 내에 내접하는 원이다.

내접원이 있을 때 삼각형의 넓이 공식은 $\dfrac{r(a + b + c)}{2}$이다.

그리고 세 변의 길이를 알고 있을 때 삼각형의 넓이 공식은 $\sqrt{s(s - a)(s - b)(s - c)}$이며, $s = \dfrac{(a + b + c)}{2}$이다.

이를 헤론의 공식이라고 한다는데 솔직히 까먹어서 헤론의 공식은 검색하였다.

아무튼 이를 이용하면 $r = \dfrac{\sqrt{s(s - a)(s - b)(s - c)}}{s}$ 로 계산할 수 있다.


[추천 풀이]

#파이썬 3.5.1
#꼭 띄어쓰기 없는 3개의 변수를 띄어쓰기 구분하여 쓰셔야 합니다
#예: 12.0 12.0 8.0 ;O / 1 2 . 0 1 2 . 0 8 . 0 ;X / 12.0*12.0*8.0 ;X / ads wet gry ;X
#안 그러면 종료됩니다.

from math import *

while True:
    inp = input()
    if len(inp.split()) != 3:
        break
    a,b,c = map(float,inp.split())
    s = (a+b+c)/2
    heron = sqrt(s*(s-a)*(s-b)*(s-c))
    r = heron/s # 1/s = 2/(a+b+c)
    print('The radius of the round table is: {0:.3f}'.format(r))
12 12 8
The radius of the round table is: 2.828
0

방식은 똑같으나 계속 읽는다는 조건으로 while문을 추가하였다.

이 문제는 코딩보다는 공식을 아는 것이 더 중요해보인다.

Leave a comment