알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 어린 왕자(1004)

HRuler 2023. 1. 24. 14:22

1. 문제

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

 

1004번: 어린 왕자

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

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline
import math

# n : 테스트케이스 수
n = int(input())

for i in range(n):
    x1, y1, x2, y2 = map(int, input().split())
    t = int(input())
    eb_cnt = 0
    for j in range(t):
        cnt = 0
        cx, cy, cr = map(int, input().split())
        dis1 = math.sqrt(((cx - x1) ** 2) + ((cy - y1) ** 2))
        if dis1 < cr:
            cnt += 1
        dis2 = math.sqrt(((cx - x2) ** 2) + ((cy - y2) ** 2))
        if dis2 < cr:
            cnt += 1
            
        if cnt == 1:
            eb_cnt += 1
    print(eb_cnt)

3. 후기

 - 이번 문제도 지난 번에 해결했던 문제와 같이 두 좌표의 길이를 제곱을 통해 구한 뒤 반지름 보다 짧은지 긴지를 판단하여 행성계 진입/이탈 횟수를 확인하였다.

 문제를 풀며 우주 공학자들도 비슷한 문제를 해결하기 위해 이와 같은 프로그래밍을 하고 있지 않을까 생각해봤다.