백준문제정리
백준(Baekjoon)알고리즘 <문제번호 1004> - 어린왕자
Jay x 2
2020. 3. 29. 00:56
728x90
반응형
문제
어린 왕자가 한 점(출발)으로 부터 한 점(도착점)으로 이동을 하려고 하는데 지나가야 하는 행성계들이 여러 개가 존재한다. 이 행성계를 피해서 지나가려면 어떻게 해야 할까?
초기 입력 출발 지점(start_x1,end_y1) 도착 지점(satrt_x2, end_y2) 가 존재하고 여러 개의 행성들의 중심(c_x,c_y) 반지름 (r)을 입력하여 어린 왕자가 몇 개의 행성계를 지나가는지 풀어본다.
풀이
우선 나의 처음 드는 생각은 행성계마다 반지름이 존재하기 때문에 반지름을 이용하여 행성계 중심으로부터 얼마나 떨어져 있는지 확인하면 될 것이라고 생각을 하였는데 조금의 오차가 있었다.
그래서 두 점 사이의 거리를 이용하여 출발지점과 도착지점 사이에 경계가 있는지 확인하면 되겠다고 생각하여 문제를 풀었다.
코드
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
32
33
|
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int testcase{};
int start_x1{}, end_y1{};
int start_x2{}, end_y2{};
int planet;
int c_x, c_y, r;
int count = 0;
cin >> testcase;
for (int i = 0; i < testcase; ++i)
{
cin >> start_x1 >> end_y1 >> start_x2 >> end_y2;
cin >> planet;
for (int j = 0; j < planet; ++j)
{
cin >> c_x >> c_y >> r;
if (pow(start_x1 - c_x, 2) + pow(end_y1 - c_y, 2) > pow(r, 2) &&
pow(start_x2 - c_x, 2) + pow(end_y2 - c_y, 2) < pow(r, 2))
count++;
else if (pow(start_x1 - c_x, 2) + pow(end_y1 - c_y, 2) < pow(r, 2) &&
pow(start_x2 - c_x, 2) + pow(end_y2 - c_y, 2) > pow(r, 2))
count++;
}
cout << count << endl;
count = 0;
}
}
|
cs |
반응형