[백준/파이썬] 1002번 터렛 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 1002번 터렛
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
서로 다른 두 지점에 있는 터렛에서 계산한 마린의 위치 계산
코드
for _ in range(int(input())):
x1, y1, r1, x2, y2, r2 = tuple(map(int, input().split()))
if x1==x2 and y1==y2 and r1==r2 :
print(-1)
continue
diffPow = (x1-x2)**2 + (y1-y2)**2
sumPow = (r1+r2)**2
rDiffPow = (r1-r2)**2
if diffPow == sumPow or rDiffPow == diffPow :
print(1)
elif diffPow > sumPow or rDiffPow > diffPow :
print(0)
else:
print(2)
설명
만약 백준을 번호순서대로 풀고 계신 코딩 입문자 분이 있다면 제일 처음으로 막히셨을 겁니다.
파이썬의 특성상, 각 변수들을 줄단위로 한번에 입력받습니다.
이렇게 입력받은 값을 split() 하여 공백을 기준으로 나누고, 각각을 int형으로 매핑합니다.
이렇게 생성되는 map 객체를 tuple로 변환1하여 각 변수들에 대입합니다.
이제 이렇게 입력 받은 값의 (x,y)좌표를 중심으로 하고 반지름이 r인 두 원을 그려, 교점을 구합니다.
이 방법으로 총 6가지의 경우를 구할 수 있습니다.
1. 기준 좌표가 같고 계산한 거리가 같은 경우
가장 쉽습니다. 두 원은 같으므로 교점은 무한대가 됩니다.
따라서 문제의 조건에 따라 -1을 출력합니다.
2. 그렇지 않을 때
-
두 지점 사이의 거리가 두 원의 반지름의 합과 같거나, 반지름의 차가 두 점 사이의 거리인경우
교점은 오직 하나만 존재합니다. -
두 지점 사이의 거리가 두 원의 반지름의 합보다 크거나, 반지름의 차가 두 점 사이의 거리보다 큰 경우
교점은 없습니다. -
그 외
교점은 두개 존재합니다.
1 참고로, tuple로의 변환과정은 없어도 상관없습니다.
댓글남기기