🖥️ CS/Baekjoon Algorithms

#1002번 터렛 (c++)

한국의 메타몽 2020. 2. 26. 02:50
#include <iostream>
#include <cmath>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int x1,y1,r1 = 0;
    int x2,y2,r2 = 0;
    int T=0;
    
    cin >> T;
    
    for(int i=0; i<T; i++)
    {
        cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
        double center = sqrt(pow(x2-x1,2) + pow(y2-y1,2));
        int mini = min(r1,r2);
        int maxy = max(r1,r2);
        
        if(center < maxy) // 원 안에 원
        {
            if(center==0&&r1==r2) // 두 원이 동일
                cout << "-1" << "\n";
            else if(center+mini==maxy) // 하나의 점
                cout << "1" << "\n"; 
            else if(center+mini>maxy) // 두개의 점
                cout << "2" << "\n";
            else if(center+mini<maxy) // 안만남 
                cout << "0" << "\n";
        }
        else // 원 밖에 원
        {
            if(center==mini+maxy) // 하나의 점 
                cout << "1" << "\n";
            else if(center<mini+maxy) // 두개의 점
                cout << "2" << "\n";
            else if(center>mini+maxy) // 안만남
                cout << "0" << "\n";
        }
    }
    return 0;
}

졸려서 처음에는 마구잡이로 의식의 흐름을 따라 풀었더니 단박에 틀려버렸다. 

테스트 케이스는 맞았고, 다른 테이스 케이스도 찾아서 테스트해봤지만

아무래도 공식을 교집합으로 정리하지 않고 if else if만 주구장창 나열하다보니

허점이 많았나 보다.

 

https://www.acmicpc.net/board/view/38854 

 

글 읽기 - ★☆★☆★ 터렛 FAQ ★☆★☆★ 터렛 FAQ ★☆★☆★

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

상단의  터렛 FAQ를 따라보며 

식을 교집합대로 정리 + 허점이 난무했던 공백들을 매꾸어 나갔다. 

깨끗하게 정리되고 보니 생각보다 쉬운 문제다. 

관건은 맨 처음부터 공식을 교집합끼리 깨끗하게 정리하는 것이다.

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#2231번 분해합 (c++)  (0) 2020.03.01
#2789번 블랙잭 (c++)  (0) 2020.03.01
#11729번 하노이 탑 이동순서 (c++)  (0) 2020.02.25
#3053번 택시 기하학 (c++)  (0) 2020.02.25
#4153번 직각삼각형 (c++)  (0) 2020.02.24