백준 22938번 문제 링크
문제 이름 : 백발백준하는 명사수
주 언어 : Python
태그 : 수학 / 기하학 / 피타고라스 정리
solved.ac 등급 : Bronze III (2022/12/01 확인)
(제목 오타 낸거 아닙니다.)
두 과녁의 중심 간의 거리를 D라고 할 때, D<R1+R2이면 (즉, 두 점 사이의 거리보다 두 원의 반지름의 합이 더 크다면) 두 과녁은 무조건 만나게 됩니다.
복잡한 증명보다는 한번 포스트잇이든 종이든 그림판이든 직접 그리면서 체험해보시면 좋을 듯 합니다.
두 점 사이의 거리 D=√(x2−x1)2+(y2−y1)2이므로, √(x2−x1)2+(y2−y1)2<R1+R2인지를 판정해주는 문제로 바뀌게 됩니다.
저는 개인적으로 실수형 변수를 거의 아예 안 믿으므로, √(x2−x1)2+(y2−y1)2<R1+R2 인지 판정하기보단 (x2−x1)2+(y2−y1)2<(R1+R2)2인지를 판정해주었습니다.
파이썬이 아닌 다른 언어에서는 int 대신 long long int 형을 써주면 오버플로우 없이 가능합니다.
x1, y1, r1 = input().split() | |
x1 = int(x1) | |
y1 = int(y1) | |
r1 = int(r1) | |
x2, y2, r2 = input().split() | |
x2 = int(x2) | |
y2 = int(y2) | |
r2 = int(r2) | |
if (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) < (r1 + r2) * (r1 + r2): | |
print("YES") | |
else: | |
print("NO") |
-번째 푼 문제 (2022/--/--)