되게 간단하지만 실수하기 쉬운 문제를 가져와봤다.
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')
되게 간단한, 기하학이라고 하기에 민망한 문제다. 하지만, 누구나 실수하기 쉬운 문제였다.
앞으로 입력되는 수의 범위를 잘 살펴봐야겠다.