백준 22938번 문제 링크
문제 이름 : 백발백준하는 명사수
주 언어 : Python
태그 : 수학 / 기하학 / 피타고라스 정리
solved.ac 등급 : Bronze III (2022/12/01 확인)
문제 보기
문제 :
백발백준은 무슨 과녁이던 백발백중하여 올림픽 금메달보다 따기 어렵다는 대한민국 양궁 국가대표 타이틀을 가지고 있다. 이런 백발백준이 현재 연마하는 스킬이 있는데...
바로 두 과녁을 한번에 맞추는 스킬이다. 이를 연습하기 위해 두 과녁이 겹치는 부분이 있어 한번에 맞추기가 가능한지 알아보고 싶어졌다.
여러분은 백발백준이 연습하는 과정을 도와주기 위해 원 모양으로 생긴 두 과녁이 겹치는 부분이 존재하는지 확인하는 프로그램을 작성해보자.
입력 :
첫번째 줄에는 첫번째 과녁의 중심 $X_{1}$, $Y_{1}$와 반지름 $R_{1}$이 주어진다.
두번째 줄에는 두번째 과녁의 중심 $X_{2}$, $Y_{2}$와 반지름 $R_{2}$가 주어진다.
$X_{1}$, $X_{2}$, $Y_{1}$, $Y_{2}$는 모두 정수이며, $R_{1}$, $R_{2}$는 모두 자연수이다.
$-10^{9} ≤ X_1, X_2, Y_1, Y_2 ≤ 10^{9}$, $0 < R_1, R_2 ≤ 10^{9}$
출력 :
두 과녁이 겹치면 YES, 아니면 NO를 출력한다.
단, 두 과녁이 한 점에서 만나는 경우는 겹치지 않는 것으로 생각한다.
(제목 오타 낸거 아닙니다.)
두 과녁의 중심 간의 거리를 $D$라고 할 때, $D < R_{1} + R_{2}$이면 (즉, 두 점 사이의 거리보다 두 원의 반지름의 합이 더 크다면) 두 과녁은 무조건 만나게 됩니다.
복잡한 증명보다는 한번 포스트잇이든 종이든 그림판이든 직접 그리면서 체험해보시면 좋을 듯 합니다.
두 점 사이의 거리 $D = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$이므로, $\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} < R_1 + R_2$인지를 판정해주는 문제로 바뀌게 됩니다.
저는 개인적으로 실수형 변수를 거의 아예 안 믿으므로, $\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} < R_1 + R_2$ 인지 판정하기보단 $(x_2 - x_1)^2 + (y_2 - y_1)^2 < (R_1 + R_2)^2$인지를 판정해주었습니다.
파이썬이 아닌 다른 언어에서는 int 대신 long long int 형을 써주면 오버플로우 없이 가능합니다.
정수로 가능한 연산은 되도록이면 정수로 해주도록 합니다.
-번째 푼 문제 (2022/--/--)