hwooo
BOJ (C/C++) 1004번: 어린 왕자 본문
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 |