본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 1004/c++] 어린 왕자 - 구현

by tokkiC 2022. 6. 24.

어린왕자가 행성을 몇개를 통과하는지 세는 문제다

피타고라스 정리의 의해 반지름 r^2= x^2+y^2 이므로 r^2보다 위치의 제곱을 더한 값이 작다면 그 원 안에 있으므로

카운트를 해주면 된다.

단, 시작점과 끝점이 모두 같은 원 안에 있을 수 있으므로, 둘 다 반지름보다 안에 있지 않다면 이라는 조건을

추가해주어 예외를 처리해야한다

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

 

1004번: 어린 왕자

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

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;


int main(){
	
	int tr;
	
	cin >> tr;
	
	for(int i=0; i<tr; i++){
		
		int xs, ys, xe, ye, n;
		int cnt=0;

		cin >> xs;
		cin >> ys;
		cin >> xe;
		cin >> ye;
		cin >> n;
		
		for(int j=0; j<n; j++){
			
			int xt, yt, r;
			
			cin >> xt;
			cin >> yt;
			cin >> r;
			
			if( !((r*r > pow(xt-xs, 2) + pow(yt-ys, 2)) && (r*r > pow(xt-xe, 2) + pow(yt-ye, 2))) ){
			
				if(r*r > pow(xt-xs, 2) + pow(yt-ys, 2))
					cnt++;						
				
				if(r*r > pow(xt-xe, 2) + pow(yt-ye, 2))
					cnt++;
					
			}
		}
		
		cout << cnt << "\n";	
		
	}
		
	return 0;
}

 

댓글