반응형
백준 1002번 풀이결과 공유 입니다.
문제
- 조규현, 백승환, 류재명이 있다.
- 조규현과 백승환의 좌표를 각각 (x1,y1), (x2,y2)로 제시한다.
- 조규현과 류재명 사이의 거리인 r1과 백승환과 류재명 사이의 거리인 r2를 제시한다.
- 류재명이 있을 수 있는 좌표의 개수를 출력한다.
문제해결
- 그리면서 해결하면 편하다. 원과 반지름이 주어졌을 때 교점의 개수를 구하는 문제이다.
- 원점이 같을 때,
1) 반지름도 같을 때 (교점이 무한대)
2) 반지름은 다를 때 (교점이 없음) - 원점이 다르고, 반지름의 길이가 같을 때 => 한 점에서 만남
- 원점이 다르고, r1+r2보다 조규현~백승환 거리가 길 때 => 교점 없음
- 원점이 다르고, r1-r2보다는 조규현~백승환 거리가 길고, r1+r2보다는 조규현~백승환 거리가 짧을 때 => 두 점에서 만남
소스코드
#include <iostream>
int main() {
int T=0;
int x1 = 0, x2 = 0, y1 = 0, y2 = 0, r1 = 0, r2 = 0, RR = 0, r1_minus_r2 = 0, r1_plus_r2 = 0;
std::cin >> T;
for (int i = 0; i < T; i++) {
std::cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
// 두 점 사이의 거리
RR = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
// 작은 원이 큰 원 안에 있을 떄를 가정 함.
r1_minus_r2 = (r1 - r2) * (r1 - r2);
//반대
r1_plus_r2 = (r1 + r2) * (r1 + r2);
if (RR == 0) // 원의 중심이 같을 때
{
if (r1_minus_r2 == 0) std::cout << "-1" << std::endl; // 반지름도 같을 때
else std::cout << "0" << std::endl;
}
else if (RR == r1_minus_r2 || RR == r1_plus_r2) std::cout << "1" << std::endl;// 한 점에서 만남.
else if (r1_minus_r2 < RR && RR < r1_plus_r2) std::cout << "2" << std::endl; // 두 점에서 만남
else std::cout << "0" << std::endl; // 멀어서 만나지 않음.
}
}
반응형
'공부 > C++' 카테고리의 다른 글
C++, 부동소수점 (0) | 2024.04.15 |
---|---|
C++ Integer, 정수 최대 최소 및 크기 (0) | 2024.04.12 |
백준 알고리즘 1004번, 어린왕자 (C++) (0) | 2024.01.08 |
백준 1008번 (C++) (3) | 2024.01.01 |
선형 대수 - 13. 선형 부분공간 (4) | 2023.11.02 |
선형 대수 - 8. 벡터의 정의 및 연산 (7) | 2023.09.26 |
C++과 Python의 차이, 컴파일 언어와 인터프리터 언어의 차이 (83) | 2023.09.07 |
C++, printf 이용하여 string 출력 (0) | 2022.12.08 |