미소를뿌리는감자의 코딩
[백준 2024/02/22] 1002번 터렛 - python ver. 본문
728x90
https://www.acmicpc.net/problem/1002
1. 접근 방법
이전에 자바로 풀어보았던 1002번 터렛을 다시 python으로 풀어보았다.
2개의 원이 접하는 점의 개수를 구하는 방법으로 문제를 접근하였다.
1. 두 점의 사이의 거리가 0 일 때,
- 반지름의 길이가 같다면 : 무한
- 반지름의 길이가 다르다면 : 0
2. 반지름을 더한 것 <= 두 점 사이의 거리
- 같다면 : 1
- < 이라면 : 0
3. | 두 반지름의 차 | >= d :
- 같다면 : 1
- > 라면 : 0
4. 그 외
- 2
총 7 가지의 경우의 수이며, 두 점에서 만나는 경우를 else로 생각하고 접근한다면 보다 쉽게 풀 수 있다.
또한 내접, 외접도 생각해서 풀면 좋다.
이런식으로 경우를 나누어서 if else 문을 구성해 주었다.
https://potatoscatteringsmile.tistory.com/25
여기에서 원의 경우의 수를 적은 것을 확인할 수 있다.
2. 코드
import math
def calculate_distance(x1, y1, x2, y2):
return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
def possible_location(d, r1, r2):
if d == 0:
if r1 != r2:
return 0
return -1
elif d >= r1 + r2:
if r1 + r2 == d:
return 1
return 0
elif abs(r1 - r2) >= d:
if abs(r1 - r2) > d:
return 0
return 1
return 2
def main():
for i in range(int(input())):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
d = calculate_distance(x1, y1, x2, y2)
print(possible_location(d, r1, r2))
if __name__ == '__main__':
main()
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/02/23] 11399번 ATM - python ver. (0) | 2024.02.23 |
---|---|
[백준 2024/02/23] 1946번 신입 사원 (0) | 2024.02.23 |
[백준 2024/02/22] 5052번 전화번호 목록 (1) | 2024.02.22 |
[백준 2024/02/22] 2108번 통계학 (0) | 2024.02.22 |
[백준 2024/02/22] 10814번 나이순 정렬 (0) | 2024.02.22 |