반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. [백준 알고리즘] 백준 22938번 백발백준하는 명사수 파이썬(Python)

1) 문제번호 : 22938번

 

2) 문제 출처

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

 

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

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

www.acmicpc.net

 

2. 문제

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

바로 두 과녁을 한번에 맞추는 스킬이다. 이를 연습하기 위해 두 과녁이 겹치는 부분이 있어 한번에 맞추기가 가능한지 알아보고 싶어졌다.

여러분은 백발백준이 연습하는 과정을 도와주기 위해 원 모양으로 생긴 두 과녁이 겹치는 부분이 존재하는지 확인하는 프로그램을 작성해보자.

 

3. 제약사항

 

4. 입력

첫번째 줄에는 첫번째 과녁의 중심 X1, Y1와 반지름 R1이 주어진다.

두번째 줄에는 두번째 과녁의 중심 X2, Y2와 반지름 R2가 주어진다.

X1, X2, Y1, Y2는 모두 정수이며, R1, R2는 모두 자연수이다.

-109 ≤ X1, X2, Y1, Y2 ≤ 109, 0 < R1, R2 ≤ 109

 

5. 출력

두 과녁이 겹치면 YES, 아니면 NO를 출력한다.

단, 두 과녁이 한 점에서 만나는 경우는 겹치지 않는 것으로 생각한다.

 

6. 풀이

- 고등학교 기하학 문제다.

- 두 원의 위치에 따라서 식이 달라지기는 한데, 겹치면 YES 그 외는 NO라고 했으므로, 접점일 경우는 무조건 NO로 한다.

- 그래서 아래의 식을 사용하여 구하면 된다.

 

7. 소스 코드

import sys
import math
input=sys.stdin.readline

X1, Y1, R1 = map(int, input().split())
X2, Y2, R2 = map(int, input().split())

D = math.sqrt((X1 - X2)**2 + (Y1 - Y2)**2)

if math.sqrt((R1 + R2)**2) > D : print("YES")
else : print("NO")

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기