카테고리 없음

[PYTHON/파이썬] 백준 BAEKJOON 1004번 어린왕자

remazitensi 2024. 8. 23. 00:31

문제링크

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

문제 풀이

 

  • 입력 받기: 테스트 케이스 개수와 각 테스트 케이스에 대해 출발점, 도착점, 행성계의 개수와 각 행성계의 정보(중심 좌표와 반지름)를 입력받습니다.
  • 거리 계산: 출발점과 도착점 각각에 대해 각 행성계의 중심과의 거리를 제곱하여 계산합니다.
  • 행성계와의 관계 확인: 각 행성계의 반지름 제곱과 비교하여 출발점과 도착점 중 적어도 하나가 행성계의 내부에 있는지 확인합니다.
  • 카운트 증가: 출발점 또는 도착점 중 하나라도 행성계의 내부에 있는 경우 카운트를 증가시킵니다.
  • 결과 출력: 모든 행성계를 처리한 후, 각 테스트 케이스에 대해 카운트를 출력합니다.

코드

# 테스트 케이스 개수 입력
T = int(input())

# 각 테스트 케이스를 처리
for _ in range(T):
    # 출발점 (x1, y1)과 도착점 (x2, y2) 좌표 입력
    x1, y1, x2, y2 = list(map(int, input().split()))
    
    # 행성계(원)의 개수 입력
    n = int(input())
    
    count = 0  # 출발점 또는 도착점이 행성계 내부에 있는 경우의 수를 카운트
    
    for _ in range(n):
        # 행성계의 중심 (cx, cy)과 반지름 (cr) 입력
        cx, cy, cr = map(int, input().split())
        
        # 출발점과 행성계 중심 간의 거리 제곱
        dis1 = (x1 - cx)**2 + (y1 - cy)**2
        
        # 도착점과 행성계 중심 간의 거리 제곱
        dis2 = (x2 - cx)**2 + (y2 - cy)**2
        
        # 행성계의 반지름 제곱
        pow_cr = cr**2
        
        # 출발점과 도착점 중 하나라도 행성계 내부에 있는 경우 카운트
        if pow_cr > dis1 and pow_cr > dis2:
            # 두 점이 모두 행성계 내부에 있는 경우 (카운트하지 않음)
            pass
        elif pow_cr > dis1:
            # 출발점이 행성계 내부에 있지만 도착점은 아닐 때
            count += 1
        elif pow_cr > dis2:
            # 도착점이 행성계 내부에 있지만 출발점은 아닐 때
            count += 1
    
    # 결과 출력
    print(count)