[BOJ 3622] - 어떤 호박의 할로윈 여행 (기하학, Python)

보양쿠·2022년 10월 17일
0

BOJ

목록 보기
50/252

되게 간단하지만 실수하기 쉬운 문제를 가져와봤다.

BOJ 3622 - 어떤 호박의 할로윈 여행 링크
(2022.10.17 기준 B2)

문제

반지름 P의 판이 있고 그 판에서 두 고리를 잘라내어야 한다. 각 고리의 바깥 반지름과 안쪽 반지름이 주어진다면, 만들 수 있는지 판별

알고리즘

간단한 기하학

풀이


그림에 두 예시가 있다. 첫번째는 두 고리를 나란히 잘라내는 경우. 두번째는 예제에 나와있는 한 고리 안에 나머지 고리가 포함되는 경우이다.

첫번째는 간단하다. 두 고리의 바깥 반자름의 합이 판의 반지름의 합보다 같거나 작으면 가능하다.
두번째는 한 고리의 바깥 반지름이 나머지 고리의 안쪽 반지름보다 같거나 작으면 가능하다.
이 두 경우를 if문으로 나타내어 판별하면 된다.

주의사항

입력되는 수의 범위를 잘 보자.

0 < A, a, B, b, P ≤ 1000000, a < A , b < B

두 고리의 바깥 반지름이 판의 반지름보다 같거나 작다고 명시되어 있지 않다.
그러므로 두 고리의 바깥 반지름 중 하나라도 판의 반지름보다 크면 불가능하다고 판별해야 한다.

코드

A, a, B, b, P = map(int, input().split())

# 두 고리 중 하나라도 판보다 크다면 불가능하다.
if A > P or B > P:
    print('No')

# 두 고리를 나란히 자르는 경우
elif A + B <= P:
    print('Yes')

# 고리 A 안에 고리 B가 포함되는 경우
elif a >= B:
    print('Yes')

# 고리 B 안에 고리 A가 포함되는 경우
elif b >= A:
    print('Yes')

# 위 세 경우에 포함되지 않으면 불가능하다.
else:
    print('No')

여담

되게 간단한, 기하학이라고 하기에 민망한 문제다. 하지만, 누구나 실수하기 쉬운 문제였다.
앞으로 입력되는 수의 범위를 잘 살펴봐야겠다.

profile
GNU 16 statistics & computer science

0개의 댓글