Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- pcce 기출문제 10번 지폐 접기 풀이
- directx 그래픽스
- 렌더링 파이프
- depth-stencil
- 코드트리 고대 문명 유적 탐사
- gemmasprint
- 백준 5567
- 프로그래밍공부
- pcce 기출문제 10번 공원
- python 고대 문명 유적 탐사
- boj 1991
- DirectX12
- 티스토리챌린지
- root signature
- constant buffre
- pcce 기출문제 10번 공원 풀이
- pccp 기출문제 풀이
- DirectX
- 고대 문명 유적 탐사
- 오블완
- texture mapping
- boj 5567
- 잔디 기부
- c++ 1991
- c++ 5567
- pcce 기출문제 풀이
- PCCE
- 수식 복원하기
- 잔디 기부 캠페인
- pcce 기출문제 9번 지폐 접기
Archives
- Today
- Total
오구의코딩모험
[Python] 1002번 : 터렛 본문
반응형
문제 설명 3줄 요약
1. 두 좌표에 터렛이 각각 존재한다.
2. 두 터렛에서 타겟까지의 거리가 주어진다.
3. 타겟이 존재할 수 있는 위치의 수를 구하여라.
알고리즘의 분류가 수학, 기하학인 것처럼
문제 설명이 굉장히 길지만
두 원의 접점을 구하라는 문제이다!
각 중심(좌표)과 반지름(타겟까지의 거리) 가 주어졌을 때,
겹치는 접점의 경우의 수는
위의 그림을 참고한다면 쉽게 알 수 있다!
- 기본적으로 두 원이 일치할 때, 답은 -1
- (2) 두 원이 외접할 때, 답은 1
- (3) 두 원이 내접할 때, 답은 1
- (4) 두 원이 서로 떨어져 있고 만나지 않을 때, 답은 0
- (5),(6) 한 원이 다른 원의 내부에 있고 두 원이 만나지 않을 때, 답은 0.
- (1)과 같은 나머지 경우, 답은 2
6 가지 정도로 분류해서
문제를 해결해보자!
기본적인 입력 틀 부터 작성!
# math 모듈 불러오기
import math
# 테스트 케이스 개수 T 입력
T = int(input())
coordinate_list = []
if __name__ == "__main__":
# x1,y1,r1,x2,y2,r2 순서의 테스트 케이스 입력 받기
for testcase in range(T):
coordinate_list.append(list(map(int, input().split())))
이번 문제는
수학인 만큼 math 모듈을 사용하였다.
두 중심 사이의 거리를 구할 때,
제곱근, sqrt()을 사용해야하므로 import math 를 써줬다!
for coordinate in coordinate_list:
x1 = coordinate[0]
y1 = coordinate[1]
r1 = coordinate[2]
x2 = coordinate[3]
y2 = coordinate[4]
r2 = coordinate[5]
# 입력 받은 좌표 사이의 거리 구하기
distance = math.sqrt((x2-x1) ** 2 + (y2-y1) **2)
# 두 원이 일치할 때
if (distance == 0) and (r1 == r2):
print(-1)
# 두 원이 외접할 때
elif (r1+r2) == distance :
print(1)
# 두 원이 내접할 때
elif ((distance + r1) == r2) or ((distance + r2) == r1) :
print(1)
# 한 원이 다른 원의 내부에 있고 두 원이 만나지 않을 때
elif abs(r2-r1) > distance :
print(0)
# 두 원이 서로 떨어져 있고 만나지 않을 때
elif (r1+r2) < distance :
print(0)
else :
print(2)
조건을 앞서 구해놨기에
차근차근 값을 고려하여 조건을 걸러나가면 된다.
여기서
한 원이 다른 원의 내부에 있고 두 원이 만나지 않을 때,
반지름(타겟까지의 거리)의 대소 관계를 모르므로
빼준 후 절댓값 함수인 abs() 함수를 덮어줬다!
결과
맞았습니다!
별 다른 알고리즘 없이
수학적인 접근이 필요한 문제이기에
어렵지 않은 문제였습니다!
반응형
'프로그래밍 공부 > 백준 알고리즘' 카테고리의 다른 글
[Python] 1021번 : 회전하는 큐 (0) | 2023.02.14 |
---|---|
[Python] 1003번 : 피보나치 함수 (0) | 2023.02.12 |
[Python] 1018번 : 체스판 다시 칠하기 (0) | 2022.08.07 |
[Python] 1015번 : 수열 정렬 (0) | 2022.08.06 |
[Python] 1059번 : 좋은 구간 (0) | 2022.08.05 |
Comments