[백준/Python]1004_어린 왕자

2021. 6. 5. 16:53백준 알고리즘

문제

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

 

1004번: 어린 왕자

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주

www.acmicpc.net

풀이

(x, y)와 (a, b)의 두 점 거리 = ((x - a) ** 2 + (y - b) ** 2)) ** 0.5

아래의 경우에만 진입/이탈 횟수를 1 증가시킵니다.

1. 행성계 안에 출발 지점이 있고 행성계 밖에 도착 지점이 있을 때

2. 행성계 안에 도착 지점이 있고 행성계 밖에 출발 지점이 있을 때

코드

import sys

t = int(sys.stdin.readline().rstrip())
for _ in range(t):
    start_x, start_y, end_x, end_y = map(int, sys.stdin.readline().rstrip().split())
    n = int(sys.stdin.readline().rstrip())
    cnt = 0
    for _ in range(n):
        p_x, p_y, radius = map(int, sys.stdin.readline().rstrip().split())
        start_to_center = (start_x - p_x) ** 2 + (start_y - p_y) ** 2  # 시작점부터 행성계 중심까지 거리(편의상 루트는 생략)
        end_to_center = (end_x - p_x) ** 2 + (end_y - p_y) ** 2  # 도착점부터 행성계 중심까지 거리
        # 행성계안에 시작점이나 도착점이 하나만 존재하면 카운트함
        if start_to_center < (radius ** 2) < end_to_center:
            cnt += 1
            continue
        if end_to_center < (radius ** 2) < start_to_center:
            cnt += 1
            continue
    print(cnt)

'백준 알고리즘' 카테고리의 다른 글

[백준/Python]1890_점프  (0) 2021.06.07
[백준/Python]2630_색종이 만들기  (0) 2021.06.07
[백준/Python]2293_동전 1  (0) 2021.06.05
[백준/Python]11659_구간 합 구하기 4  (0) 2021.06.04
[백준/Python]11057_오르막 수  (0) 2021.06.04