The Way

백준 1004번: 어린 왕자 본문

PS/백준 온라인 저지

백준 1004번: 어린 왕자

Jeonggyun 2017. 8. 22. 14:56

백준 온라인 저지(BOJ) 1004번 문제

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



1. 문제 요약

여러 원에 둘러쌓인 두 점이 있다. 한 점에서 다른 한 점으로 갈 때,

지나야 하는 경계의 최소 개수는?

(원의 경계가 맞닿거나 교차하는 경우는 없다)



2. 알고리즘

원의 경계가 맞닿거나 교차하는 경우는 없다는 조건 때문에 문제풀이가 쉬워진다.

두 점이

i) 둘 다 원 안에 있다면 0번

ii) 둘 다 원 밖에 있다면 0번

iii) 둘 중 하나만 원 안에 있다면 1번

씩 더해주면 된다.


1002번과 마찬가지로 거리를 비교할 때 sqrt를 쓰지 않는 편이 이롭다.



3. 코드

#include <iostream>

int main() {
	int T;
	scanf("%d", &T);

	for (int i = 0; i < T; ++i) {
		int x1, y1, x2, y2;
		scanf("%d %d %d %d", &x1, &y1, &x2, &y2);

		int n;
		scanf("%d", &n);
		int count = 0;
		for (int j = 0; j < n; ++j) {
			int cx, cy, r, d;
			bool in1, in2;

			scanf("%d %d %d", &cx, &cy, &r);
			d = (cx - x1) * (cx - x1) + (cy - y1) * (cy - y1);
			in1 = d > r * r ? false : true;
			d = (cx - x2) * (cx - x2) + (cy - y2) * (cy - y2);
			in2 = d > r * r ? false : true;
			if (in1 != in2) count++;
		}
		printf("%d\n", count);
	}

	return 0;
}


'PS > 백준 온라인 저지' 카테고리의 다른 글

백준 10172번: 개  (0) 2017.08.22
백준 1008번: A/B  (0) 2017.08.22
백준 1003번: 피보나치 함수  (2) 2017.08.22
백준 1002번: 터렛  (1) 2017.08.22
백준 3052번: 나머지  (0) 2017.08.22
Comments