안녕하세요.

여행벌입니다.

방학이 끝나기 전에 예전에 풀었던 문제들도 포스팅을 해보려고 합니다.


https://www.acmicpc.net/problem/1004

 

1004번: 어린 왕자

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주어지며, 세 번째 줄부터 n줄에 걸쳐 행성계의 중점과 반지름 (cx, cy, r)이 주어진다. 입력제한은 다음과 같다. (-1000 ≤ x1, y1, x2, y2, cx, cy ≤ 1000, 1 ≤ r ≤ 1000, 1 ≤ n ≤ 50) 좌표와 반지름

www.acmicpc.net

[알고리즘설계]

출발점과 도착점이 원의 안과 밖으로 나뉜다면 카운트를 해준다.

#include<iostream>

using namespace std;

int main(void) {
	int total_case, planet_case; //테스트 케이스 횟수, 행성 갯수
	int x1, y1, x2, y2; //출발점좌표와 도착점좌표
	int count = 0; //행성이탈횟수를 세주는 변수
	int x3, y3, r; //행성의 중점과 반지름
    cin >> total_case;
	while (total_case > 0) { //전체 테스트 횟수
		count = 0; //테스트마다 count를 초기화 해준다.
        cin >> x1 >> y1 >> x2 >> y2 >> planet_case;
		for (int i = 0; i < planet_case; i++) {
        	cin >> x3 >> y3 >> r;
			if (((((x1 - x3)*(x1 - x3) + (y1 - y3)*(y1 - y3)) >= r * r)
				&& ((x2 - x3)*(x2 - x3) + (y2 - y3)*(y2 - y3) <= r * r))
				//출발점이 원 밖, 도착점이 원 안 인 경우
				||
				((((x1 - x3)*(x1 - x3) + (y1 - y3)*(y1 - y3)) <= r * r)
					&& ((x2 - x3)*(x2 - x3) + (y2 - y3)*(y2 - y3) >= r * r))) {
				count++;
			}
				//출발점이 원 안, 도착점이 원 밖 인 경우
		}
		total_case--;
        cout << count << '\n';
	}
}

열심히 공부하고 노력하고 있는 꿈 많은 예비 개발자입니다.

혼자서 공부한 내용을 정리하고 포스팅하다 보니 틀린 내용이 있을 수도 있습니다.

많은 조언과 가르침 주실 분은 댓글로 자유롭게 남겨주셔도 좋을 것 같습니다! 

감사합니다.

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 11758 - CCW  (0) 2019.08.28
[BOJ] 7569 - 토마토  (0) 2019.08.27
[BOJ] 1003 - 피보나치 함수  (0) 2019.08.22
[BOJ] 1697 - Catch That Cow  (0) 2019.08.21
[BOJ] 1012 - 유기농 배추  (0) 2019.08.21

+ Recent posts