본문 바로가기

Algorithm/Math

(Python) - 백준(BOJ) 22938 : 백발백준하는 명사수

반응형

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

 

22938번: 백발백준하는 명사수

백발백준은 무슨 과녁이던 백발백중하여 올림픽 금메달보다 따기 어렵다는 대한민국 양궁 국가대표 타이틀을 가지고 있다. 이런 백발백준이 현재 연마하는 스킬이 있는데... 바로 두 과녁을

www.acmicpc.net

원의 성질을 이용하는 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

info, info2 선언 후 한 원의 중심 (x, y) 좌표와, 원의 반지름 r을 list형태로 입력받습니다.두 반지름의 합은 total_radian에, 원 좌표 사이의 거리를 구해 dist에 저장합니다.

📔 풀이과정

10^9까지의 범위이므로 좌표 사이의 거리로 제곱값을 구해야하는 상황에서 overflow가 납니다. 사직연산에 대한 bigint를 지원하는 언어가 문제를 풀기 유리합니다.

원이 접하고 있는 그림입니다. 이 경우 a + b가 원의 좌표 사이의 거리와 같게 됩니다. 이 원이 서로 멀어진다면 total_radian보다 dist가 커지게 됩니다. 이 두 경우에 겹치는 원의 영역은 없습니다.

📔 정답출력

조건에 따라 정답을 출력합니다.


📕 Code

from math import sqrt
import sys
input = sys.stdin.readline
info = list(map(int, input().split()))
info2 = list(map(int, input().split()))

dist = sqrt((info[0] - info2[0]) ** 2.0 + (info[1] - info2[1]) ** 2.0)
total_radian = info[2] + info2[2]
if dist >= total_radian: print("NO")
else: print("YES")

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.