본문 바로가기
알고리즘 풀이/백준

[백준 1002] 터렛 (python)

by char_lie 2023. 3. 8.
반응형

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

 

1002번: 터렛

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

www.acmicpc.net

터렛 문제

두 점의 좌표와 각각의 좌표로부터 거리가 주어졌을 때, 가능한 좌표의 수를 출력하는 문제

그림을 그려보고, 수학적으로 접근하면 쉽게 풀 수 있던 문제

내가 푼 정답코드

import sys, math
T = int(sys.stdin.readline())
for _ in range(T):
    x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())

    distance = math.sqrt((x1-x2)**2 + (y1-y2)**2) # 두 점의 거리
    if distance == 0 and r1 == r2: # 거리가 0이고 두 점으로부터의 거리가 같으면
        print(-1) # 무한개
    elif abs(r1-r2) < distance < r1+r2: # 두 점으로부터의 거리 합 사이에 있으면
        print(2) # 2개
    elif distance == r1 + r2 or abs(r1-r2) == distance: # 겹치면
        print(1) # 1개
    else: # 아니면
        print(0) #없음

수학적인 문제로 두 원의 교점의 갯수를 구하는 문제와 동일하다

두 원이 겹칠 경우 무한개

두 원이 겹치지 않고, 거리 합 사이에 있으면 2개

두 원이 겹치지 않고, 접하면 1개

두 원이 겹치지 않고, 포개지지 않으면 0개

를 코드로 구현하면 되는 간단한 문제


느낀 점

수학적인 문제라 쉽게 접근했던 문제, 크게 코딩적인 기술을 사용하기보단 수학적인 지식을 활용해서 구현하는 문제여서 큰 어려움없이 풀었다.

반응형

댓글