본문 바로가기

baekjoon python 알고리즘

백준 - [16490] 외계인의 침투 [골2]

728x90
반응형

<문제 조건>

문제

2118년, 태양계 밖에 살고 있는 외계인들이 대한민국 부산광역시에 도착했다!

부산광역시의 시민들은 외계인들의 레이저 공격을 막기 위해 위에서 보았을 때 원 모양인 성을 쌓았다. 그리고 그 성 위에 세 개의 점 A, B, C를 삼각형 ABC가 정삼각형이 되도록 잡고, 그 정삼각형의 테두리 위에 또 성을 쌓았다. 

하지만, 외계인의 레이저는 너무 강력했다. 외계인들이 원 모양의 성 밖에서 레이저를 쏘았는데, 그 레이저가 정확히 점 A를 통과했다. 외계인들이 쏜 레이저와 원 모양의 성벽이 만난 점을 P, 레이저와 삼각형 ABC가 만난 점을 D라고 한다. (단, 점 P, D, A, B, C는 서로 다른 점이며, D는 변 BC 위에 있다.) 그리고, 선분 PA, PB, PC의 길이를 각각 a, b, c, 삼각형 ABC의 한 변의 길이를 t라고 한다.

a와 t의 값이 주어지면, b×c의 값을 구하는 프로그램을 작성하시오.

입력

첫 번째 줄에 a와 t의 값이 사이에 공백을 한 개 두고 차례대로 주어진다. (단, a와 t의 값은 100 이하의 양의 정수이고, a와 t의 값으로 인해 문제의 상황이 만들어질 수 없는 경우는 주어지지 않는다.)

출력

첫 번째 줄에 b×c의 값을 소수점 아래의 첫째 자리에서 반올림하여 출력한다.

 

예제 입력 1

9 8

예제 출력 1

17

힌트

아래의 그림은 문제의 상황을 나타낸 것이다.

단, 위의 그림에서 B와 C의 위치는 서로 바뀔 수 있으며, P와 D의 위치는 a와 t의 값으로 바뀐다.

<문제 풀이>

간단히 도형을 먼저 보자.

정삼각형에 외접한 원이 있고, 점 A를 지나고 선분 BC 위에 있는 점 D를 지나는 선분이 외접원 위의 점 P를 지난다.

다음 이미지를 보자.

원주각의 성질로 인해, 각 ●, 각 ×는 각각 위의 이미지와 같이 표현할 수 있다.

여기까지 따라왔다면, 다음 과정도 쉽다.

정삼각형의 세 각은 모두 60º이므로, 각 ●, 각 ×는 서로 그 크기가 60º로 같다.

정리하자면, 예제의 값을 빌려 이렇게 표시할 수 있다.

구해야할 값은 b×c이므로, 코사인 법칙을 쓰면 됨을 알 수 있다.

b와 c에 대해 코사인 법칙을 써서 그 값을 구하면, 다음과 같은 식이 나온다.

$$ {8}^{2}={9}^{2}+{b}^{2}-{2}\times {9}\times {b} $$

이것을 풀면 다음과 같다.

$$ {64}={81}+{b}^{2}-{18}\times {b} \\ {b}^{2}-{18}{b} + 17=0 $$

b와 c는 위의 방정식의 서로 다른 근을 각각 갖는다.

문제에서 요구하는 답은 b×c이므로 근과 계수의 관계에 의하여, 17이 답이 된다.

그렇다면, 이것의 알고리즘을 추정해보자.

81-64=17이므로, 9의 제곱에서 8의 제곱을 뺀 값이 답이 됨을 알 수 있고, 즉, 코드로 표현하면 아래의 정답 코드가 될 것이다.

<정답>

a,b=map(int,input().split())
print(a**2-b**2)
728x90
반응형