Eat the ENAK

BOJ1002 - 터렛 본문

PS: Problem Solving/BOJ: 백준온라인저지

BOJ1002 - 터렛

으낙 2019. 10. 28. 19:14

문제 바로가기

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

Solved.ac* 난이도

* Solved.ac는 백준 온라인 저지의 문제들에 난이도를 매겨주는 서비스입니다. 자세한 내용은 홈페이지를 참고해주세요.

 


본문


해설

https://github.com/return0927/CodingWrite-UP/blob/master/BOJ/1002/1002.py

 

처음에 문제를 제대로 안 읽고 두 원의 교점 좌표를 구하라는줄 알고 방정식 3개를 연산하다가 아 이건 아닌거같은데.. 하면서 다시 보니 교점 개수를 구하는거라 카더라,,

학창시절에 배웠을법한 두 원의 위치관계를 떠올리며 케이스를 고려하면 쉽게 풀 수 있는 문제다. 원의 두 중심 사이 거리와 반지름의 길이를 이용해 두 원의 위치관계를 생각해보면 된다.

 

두 원의 위치관계 (출처: https://mathbang.net/101)

 

따라서 아래의 단계를 따라 모든 경우를 고려할 수 있다.

1. 원의 중심이 일치하는 경우 (\(d=0\))

\(x_1 = x_2, y_1 = y_2\)일 때, \(r_1 = r_2\)이면 교점은 무수히 많고(\(-1\)), \(r_1 \ne r_2\)이면 교점은 없다(\(0\)).

 

2. 원의 중심이 떨어져있는 경우 (\(d\ne0\))

2.1. 두 원이 접하는 경우

두 원이 \(r_1 + r_2 = d\)이면 외접, \(|r_1 - r_2| = d\)이면 내접하기 때문에 교점은 1개이다.

2.2. 두 점에서 만나는 경우

\(|r_1 - r_2| < d < r_1 + r_2\)이면 두 원은 두개의 교점을 갖는다.

2.3. 그렇지 않은 경우

교점이 없다

 

    # 만약 중심이 같다면
    if x1 == x2 and y1 == y2:
        if r1 == r2:  # 반지름도 같다면 무수히 많다
            print(-1)
        else:  # 반지름이 다르면 교점이 하나도 없다
            print(0)
    else:  # 중심이 다르다면
        # 거리에 따라 조건이 달라지지
        distance = ((x1 - x2)**2 + (y1 - y2)**2)**.5

        if r1 + r2 == distance or abs(r1 - r2) == distance:
            print(1)
        elif abs(r1 - r2) < distance < r1 + r2:
            print(2)
        else:
            print(0)

 

'PS: Problem Solving > BOJ: 백준온라인저지' 카테고리의 다른 글

BOJ3009 - 네 번째 점  (0) 2019.10.29
BOJ4153 - 직각삼각형  (0) 2019.10.28
BOJ3053 - 택시 기하학  (0) 2019.10.28
BOJ2869 - 달팽이는 올라가고 싶다  (0) 2019.10.26
BOJ1193 분수찾기  (0) 2019.10.26
Comments