읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
문제 풀이
원의 중심과 반지름이 주어지고 해당 원을 중심으로 반지름을 그렸을 때 겹치는 교점이 적이 위치할 수 있는 좌표가 된다. 케이스에 따라 교점이 무한대, 0개, 1개, 2개로 구분할 수 있는데 교점이 무한대려면 중심의 위치가 같고 반지름도 같아야 한다. 교점이 0개면 아예 떨어져 있거나 내부에 포함된 2가지 경우에 해당한다. 교점이 1개인 경우도 외접하던 내접하던 2개만 존재한다. 그러면 나머지 케이스에 대해서는 모두 교점이 2개임을 의미하므로 분기문을 작성하면 된다.
python 코드
case = int(input()) # 케이스 개수 for _ in range(case): # 두 원의 중심, 반지름 입력 x_1, y_1, r_1, x_2, y_2, r_2 = map(int, input().split()) # 두 원의 중심간 거리 D = ((x_1 - x_2) ** 2 + (y_1 - y_2) ** 2) ** 0.5 R, r = max(r_1, r_2), min(r_1, r_2) # 반지름 크기 비교 if D == 0: # 만약 두 명의 위치가 같다면 if r_1 == r_2: # 반지름도 같으면 print(-1) # 무한대 else: # 반지름이 다르면 print(0) # 교점 없음 elif r_1 + r_2 < D or R > D + r: # 아예 떨어져 있거나, 내부에 포함된 경우 print(0) # 교점 없음 elif r_1 + r_2 == D or R == D + r: # 내접하거나 외접한 경우 print(1) # 교점 1개 else: # 그 외 print(2) # 교정 2개
'Algorithms > Baekjoon' 카테고리의 다른 글
BOJ #1541 잃어버린 괄호 (0) | 2021.04.24 |
---|---|
BOJ #1759 암호 만들기 (0) | 2021.04.24 |
BOJ #9020 골드바흐의 추측 (0) | 2021.04.08 |
BOJ #4948 베르트랑 공준 (0) | 2021.04.08 |
BOJ #1011 Fly me to the Alpha Centauri (0) | 2021.03.28 |