알고리즘/BOJ

백준 1004번 어린 왕자

꾸준함. 2018. 5. 1. 13:16

문제 링크입니다: https://www.acmicpc.net/problem/1004


터렛 문제(http://jaimemin.tistory.com/513?category=988050)와 같이 기하학 문제였기 때문에 점과 점 사이의 거리 공식을 또 사용하였습니다.

핵심은 시작점과 도착점의 위치였습니다.

시작점과 도착점이 모두 주어진 행성 내/외에 있다면 굳이 지나가지 않아도 됩니다.

하지만 시작점이 행성 내부에 있고 도착점이 행성 외부에 있거나 시작점이 행성 외부에 있고 도착점이 행성 외부에 있다면 반드시 지나가야합니다.


#include <iostream>

#include <cmath>

using namespace std;

 

int x, y, x2, y2; //시작점, 도착점

int cx, cy, r; //주어진 행성계의 중점, 반지름

double diffStart, diffDestination;

pair<int, int> start, destination;

pair<int, int> planet;

 

//거리 계산

void calculateDistance(void)

{

        //주어진 행성의 중점과의 거리 계산

        diffStart = sqrt(pow(start.first - cx, 2.0) + pow(start.second - cy, 2.0));

        diffDestination = sqrt(pow(destination.first - cx, 2.0) + pow(destination.second - cy, 2.0));

}

 

//지나가야할 행성 수

int mustPassNum(void)

{

        calculateDistance();

        //시작점과 도착점 모두 행성 안에 있거나 행성 밖에 있으면 안 지나가도 된다.

        //하지만 시작점은 안에 있고 도착점은 밖에 있거나

        //도착점은 안에잇고 시작점은 밖에 있으면 지나가야한다.

        double multiple = (r - diffStart)*(r - diffDestination);

        if (multiple < 0)

                 return 1;

        else

                 return 0;

}

 

int main(void)

{

        int test_case;

        cin >> test_case;

 

        for (int i = 0; i < test_case; i++)

        {

                 cin >> x >> y >> x2 >> y2;

 

                 start = make_pair(x, y);

                 destination = make_pair(x2, y2);

 

                 int planetNum;

                 cin >> planetNum;

 

                 int result = 0;

                 for (int j = 0; j < planetNum; j++)

                 {

                         cin >> cx >> cy >> r;

                         result += mustPassNum();

                 }

                 cout << result << endl;

        }

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1475번 방 번호  (0) 2018.05.05
백준 1037번 약수  (2) 2018.05.04
백준 1002번 터렛  (0) 2018.05.01
백준 14926번 Not Equal  (0) 2018.05.01
백준 1085번 직사각형에서 탈출  (0) 2018.04.30