Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

hwooo

BOJ (C/C++) 1004번: 어린 왕자 본문

Study/Algorithm

BOJ (C/C++) 1004번: 어린 왕자

hwooo 2022. 10. 24. 02:49

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

 

1004번: 어린 왕자

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주

www.acmicpc.net


풀이

행성계 진입/이탈 횟수 : 출발점을 감싸고 있는 원의 갯수 + 도착점을 감싸고 있는 원의 갯수

이 때 출발점과 도착점이 같은 원 안에 있으면 행성계 진입/이탈이 필요 없으므로 0


코드

#include <stdio.h>

int Is_in(int x, int y, int rx, int ry, int r) {
	int d = (x - rx)*(x - rx) + (y - ry)*(y - ry);
	if (d > r*r) return 0; // 행성계에 속해 있지 않은 경우
	else return 1;
}
int main() {
	int T, N;
	int x1, x2, y1, y2, Cx, Cy, r;
	int cnt = 0, cnt_s, cnt_e;
	scanf("%d", &T);
	for (int t = 0; t < T; t++) {
		scanf("%d %d %d %d", &x1, &y1, &x2, &y2); // 출발점 : (x1,y1) 도착점 : (x2,y2)

		scanf("%d", &N); // 행성계의 개수
		for (int n = 0; n < N; n++) {
			scanf("%d %d %d", &Cx, &Cy, &r); // 행성계의 중점 : (Cx,Cy), 반지름 : r
            
			cnt_s = Is_in(x1, y1, Cx, Cy, r);
			cnt_e = Is_in(x2, y2, Cx, Cy, r);
            
			if (cnt_s + cnt_e == 2) continue; // 출발점과 도착점이 같은 원 안에 있는 경우
			cnt += (cnt_s + cnt_e);
		}
		printf("%d\n", cnt);
		cnt = 0;
	}
	return 0;
}

'Study > Algorithm' 카테고리의 다른 글

BOJ (C/C++) 11047번: 동전 0  (0) 2022.10.24
BOJ (C/C++) 1436번: 영화감독 숌  (0) 2022.10.24
BOJ (C/C++) 10807번: 개수 세기  (0) 2022.10.24
BOJ (C/C++) 4375번: 1  (0) 2022.10.24
BOJ (C/C++) 1002번: 터렛  (0) 2022.10.22