[백준 #1004] 어린 왕자(Python)

Updated:

문제 설명

예제 입출력

이 문제는 출발점에서 도착점까지 최소의 원을 통과하는 문제이다.
그림으로 보면 이해가 더 쉽다.
예제 입력 1 의 첫번째 테스트 케이스를 그려보면 문제 설명의 좌표평면이 되는데, 출발점에서 도착점까지는 최소 3개의 원을 지나기 때문에 답은 3이다.
이 문제를 해결하기 위해서는 아래와 같은 정리가 필요하다.

PDH의 정리
- 원에 출발점과 도착점이 같이 있을 때
- 원에 출발점만 있을 때
- 원에 도착점만 있을 때
- 원에 출발점과 도착점이 없을 때

원에 출발점과 도착점이 같이 있다면 원을 지나지 않아도 되기 때문에 그저 pass. 원에 출발점만 있거나 도착점만 있는 경우는 원을 지나야 만나기 때문에 ++1
원에 출발점과 도착점이 없을 때는 원을 무시해도 되므로 그저 pass.

이제 코드를 짜면 된다.
위의 정리를 활용하여 뚞딲 짜보면~

Code


for _ in range(int(input())):
    cnt=0
    x1,y1,x2,y2=map(int, input().split())
    for _ in range(int(input())):
        cx,cy,r=map(int, input().split())
        d1=((cx-x1)**2+(cy-y1)**2)**0.5
        d2=((cx-x2)**2+(cy-y2)**2)**0.5
        if d1<r and d2<r:
            pass
        elif d1<r:
            cnt+=1
        elif d2<r:
            cnt+=1
    print(cnt)

Leave a comment