백준 1002번 : 터렛

inxnxng·2021년 1월 22일
0

알고리즘 공부

목록 보기
1/42
post-thumbnail

링크 : https://www.acmicpc.net/problem/1002

테스트 케이스의 분류를 잘했어야 하는 문제였다.

  1. 거리를 구하고
  2. 반지름1과 반지름2의 합과 차 range로 case를 분류하자

라는 생각을 시작으로 접근하였다.

#include<iostream>
#include<cmath>
using namespace std;

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

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

		if (r1 < r2)
			swap(r1, r2);

		if (len == 0) {
			if (r1 == r2)
				cout << -1 << endl;
			else
				cout << 0 << endl;
		}

		else if (len > abs(r1 - r2) && len < r1 + r2)
			cout << 2 << endl;

		else if (len == r1 + r2|| len == abs(r1-r2))
			cout << 1 << endl;

		else
			cout << 0 << endl;
	}
	return 0;
}

sqrt와 pow함수를 이용하여 원의 중심들 사이의 거리를 구하였다.

설명

1, 2, 3번은 보자마자 확인했지만 4, 5, 6은 뒤늦게서야 오답이 뜨고 깨달았다. 특히 6번은 수식화하는데 오래 걸렸다. 결국 수학이 발목을 붙잡는다. 하지만 그럴수록 더욱 노력해야한다는 것도 알고 있고 문제를 풀면서 느꼈다.

케이스 분류를 더욱 신경 써야겠다는 점과 문제를 풀기 전에 어떤 유형의 문제인지 파악하고 유형을 파고든다는 생각으로 알고리즘을 학습해야겠다는 생각을 했다.

0개의 댓글