BEAKJOON

백준(1002번 터렛)풀이 C++

Shin_jisoo 2021. 1. 14. 21:09
728x90

www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

1) 주석 없는 VERSION

#include <iostream>
#include <cmath>
#include <stdio.h>

using namespace std;

int main() {
	int x1, y1, r1, x2, y2, r2;
	int t;
	cin >> t;

	for (int i = 0;i < t;i++) {
		cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;

		double d;
		d = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));

		if (d == 0.0) {
			if (r1 == r2) {
				cout << "-1" << "\n";
			}
			else {
				cout << "0" << "\n";
			}
		}

		else if (d > abs(r1 - r2) && d < r1+r2) {
			cout << "2" << "\n";
		}

		else if (d == r1+r2||d==abs(r1-r2)) {
			cout << "1" << "\n";
		}
		
		else {
			cout << "0" << "\n";
		}
	}
}

 2) 주석 있는 VERSION

#include <iostream>
#include <cmath>
#include <stdio.h>

using namespace std;

int main() {
	int x1, y1, r1, x2, y2, r2;
	int t;
	cin >> t;

	for (int i = 0;i < t;i++) {
		cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;

		// 조규현과 백승환 사이의 거리를 계산
		double d;
		d = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));

		// 두 사람이 같은 위치에 있을 때
		if (d == 0.0) {
			// 반지름도 같다면 무한대
			if (r1 == r2) {
				cout << "-1" << "\n";
			}

			//반지름이 다르다면 류재명이 있을 수 있는 좌표는 없다.
			//두 개의 원이 겹치지 않으므로
			else {
				cout << "0" << "\n";
			}
		}

		//두 개의 원이 두 점에 겹칠 때의 공식
		else if (d > abs(r1 - r2) && d < r1 + r2) {
			cout << "2" << "\n";
		}

		//두 개의 원이 한 점에 겹칠 때의 공식
		else if (d == r1+r2||d==abs(r1-r2)) {
			cout << "1" << "\n";
		}
		
		//아닌 경우
		else {
			cout << "0" << "\n";
		}
	}
}