본문 바로가기
IT/알고리즘

1일 N알고리즘 - #29

by Sungjun_ 2020. 5. 27.

문제

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

 

1002번: 터렛

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

www.acmicpc.net

문제는 위 사이트를 참고해주세요.

 


풀이

T = int(input())
n = 0
while n != T:
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    d = ((x2 - x1) ** 2 + (y2 - y1) ** 2)
    if x1 == x2 and y1 == y2:
        if r1 == r2:
            print(-1)
        else:
            print(0)
    else:
        if d < (r1 - r2) ** 2 or d > (r1 + r2) ** 2:
            print(0)
        elif d == (r1 + r2) ** 2 or d == (r1 - r2) ** 2:
            print(1)
        elif d > (r1 - r2) ** 2:
            print(2)
    n += 1

 

이 문제에서 출력 값 2, 1, 0은 두 원이 겹치는 점의 개수로 생각하시면 됩니다.

 

T에는 테스트 케이스 개수를 저장해줍니다.

n을 0으로 초기화합니다.

 

while문은 n이 테스트 케이스와 같아지면 종료되게 합니다.

먼저 두 원의 좌표와 반지를 각각 입력받습니다.

d는 두 원의 거리로 루트를 씌우지 않고 뒤 쪽에 쓰이는 반지름에 다 제곱을 했습니다.

 

먼저 좌표가 무한일 경우는 두 원이 완전히 겹치는 경우인데,

두 원의 좌표가 같고 반지름이 같으면  완전히 겹치기 때문에 -1를 출력합니다.

반지름이 다르면 둘 중 한 원이 다른 원 안에 있기 때문에 0을 출력합니다.

 

그리고 마지막 else문의 조건은 직접 두 원을 그려보시면 더 이해가 빠르실 겁니다.

(저는 손으로 그리기 귀찮아 파이썬의 turtle을 사용했습니다.)

 

모든 조건문이 끝나면 n에 +1을 해주고 다시 while문 처음으로 돌아갑니다.

 


결과

결과 화면

 

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

1일 N알고리즘 - #31  (0) 2020.05.28
1일 N알고리즘 - #30  (0) 2020.05.28
1일 N알고리즘 - #28  (0) 2020.05.25
1일 N알고리즘 - #27  (0) 2020.05.25
1일 N알고리즘 - #26  (0) 2020.05.25

댓글