1002_터렛_백준오류가 있는 듯 하다??!
Python/백준

1002_터렛_백준오류가 있는 듯 하다??!

728x90

문제는 더보기!

 

더보기

문제

조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다.

이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.

조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.

한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, y1, x2, y2는 -10,000보다 크거나 같고, 10,000보다 작거나 같은 정수이고, r1, r2는 10,000보다 작거나 같은 자연수이다.

출력

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

예제 입력 1 복사

3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5

예제 출력 1 복사

2
1
0

 

문제가 길어보이지만 원이 몇개 겹치는지 알아내는 코드이다. 저번에 한 택시기하학으로 푸는건줄 알고 헤메고... 케이스를 많이 생각안하고 헤매고.. 하다가 결국 수학문제라는 거에 영감을받아서 내접 외접 겹치는 조건 등을 생각했는데도 풀리지 않았다. 밑이 내가 처음에 쓴 코드

 

t = int(input())
for _ in range(t):
    x1,y1,r1,x2,y2,r2 = map(float,input().split())
    d = ((x2-x1)**2 + (y2-y1)**2)**0.5

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

#백준에서 오류처리

그리고 밑은 정답인정이 된 코드이다.

t = int(input())
for _ in range(t):
    x1,y1,r1,x2,y2,r2 = map(float,input().split())
    d = ((x2-x1)**2 + (y2-y1)**2)**0.5

    if d==0 and r1==r2:
        print(-1)
    elif d == abs(r2-r1) or d == r1 + r2:
        print(1)

    elif abs(r1 - r2) < d < (r1 + r2):
        print(2)
    else:
        print(0)

둘의 차이점은 첫번쨰 if와 두번째 elif 순서가 바뀌었다는거 여기서 의문이 드는점이 하나있다.

 

입력이 0 0 0 0 0 0 으로 들어가면 -1으로 나와야 정답으로 인정이 된다, 즉 동심원으로 봐서 무한개가 있다는 걸로 본다는 건데 방금 말한 것처럼 동심원인데 크기가 0이라면 결국 세 사람이 같은위치에 있는것만으로 경우가 축약되어서 1이 나와야 한다는 생각이든다... 

 

 

++++++++++++

깨달았다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 순서를 바꾸면 0 0 3 0 0 3일경우에도 1로 나오게 되고, 무엇보다 문제조건에 자연수라고 적혀있어서 시도를 안해도 되는 거였다. 헤프닝으로 마무리

728x90

'Python > 백준' 카테고리의 다른 글

10870_피보나치 수열  (0) 2021.11.20
10872_팩토리얼  (0) 2021.11.20
3053_택시기하학  (0) 2021.11.19
4153_직각삼각형  (0) 2021.11.18
3009_네번째 점  (0) 2021.11.17