자료구조 및 알고리즘/백준

[python] 1004. 어린왕자

viamemine 2023. 2. 12. 23:15
728x90
반응형
  • 문제 

 

 

 

  • 올바른 풀이
T = int(input())

for i in range(T):
    cnt = 0
    x1, y1, x2, y2 = map(int, input().split()) # 출발점과 도착점
    n = int(input())

    for i in range(n):
        c1, c2, r = map(int, input().split()) # 행성계 중점과 반지름
        d1 = (((x1 - c1) ** 2) + ((y1 - c2) ** 2)) ** 0.5
        d2 = (((x2 - c1) ** 2) + ((y2 - c2) ** 2)) ** 0.5

        # 둘 다 속하거나 둘 다 속하지 않으면 진입이나 이탈할 필요 없음
        if (d1 < r and d2 > r) or (d1 > r and d2 < r):
            cnt += 1 # 하나는 속하고 하나는 속하지 않을 때 체크
    print(cnt)

 

 

다음 그림과 같이, 출발점에서 도착점까지의 진입/이탈 횟수를 구하는 문제이다. 

출발점과 도착점 사이에 각 행성계의 반지름을 통해 진입/이탈 횟수를 구한다.

출발점/도착점과 행성의 반지름 사이의 거리를 통해 반지름보다 크거나 작으면 카운트하는 방법으로 문제를 해결한다.

 

728x90

'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글

[python] 1904. 01타일  (0) 2023.02.20
[python] 9184. 신나는 함수 실행  (0) 2023.02.17
[python] 1966. 프린터 큐  (0) 2023.02.02
[python] 4949. 균형잡힌 세상  (0) 2023.01.30
[python] 2164. 카드2  (0) 2023.01.28