λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ½”λ”©ν…ŒμŠ€νŠΈ(Baekjoon)

[python] Baekjoon 1002 : ν„°λ ›

by SeopπŸ˜€ 2024. 1. 20.
λ°˜μ‘ν˜•

문제 - Baekjoon 1002 : ν„°λ ›

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

 

1002번: ν„°λ ›

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€ λ₯˜μž¬λͺ…이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ λ₯˜μž¬λͺ…이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ κ°œμˆ˜κ°€ λ¬΄ν•œλŒ€μΌ κ²½μš°μ—λŠ” $-1$ 좜λ ₯ν•œλ‹€.

www.acmicpc.net

 

핡심

- 문제: 두 ν„°λ ›μ—μ„œ μ κΉŒμ§€μ˜ 거리λ₯Ό λ°”νƒ•μœΌλ‘œ 적의 κ°€λŠ₯ν•œ μœ„μΉ˜ 수 κ³„μ‚°ν•˜κΈ°

λ‚΄μš©

- 이 λ¬Έμ œλŠ” 두 ν„°λ ›μ˜ μ’Œν‘œμ™€ 각 ν„°λ ›μ—μ„œ μ κΉŒμ§€μ˜ 거리λ₯Ό μ£Όμ–΄μ§„ μ‘°κ±΄μ—μ„œ μ‚¬μš©ν•˜μ—¬, 적이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ 수λ₯Ό κ³„μ‚°ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” κΈ°ν•˜ν•™μ  κ°œλ…κ³Ό 쑰건 νŒλ‹¨ λŠ₯λ ₯을 ν•„μš”λ‘œ ν•©λ‹ˆλ‹€.

coding class

μ ‘κ·Ό 방법

  1. μ’Œν‘œ 및 거리 μž…λ ₯ 처리: μž…λ ₯된 각 ν„°λ ›μ˜ μ’Œν‘œ (`x_1`, `y_1`, `x_2`, `y_2`)와 거리 (`r_1`, `r_2`)λ₯Ό μ •μˆ˜λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
  2. 거리 계산: 두 ν„°λ › μ‚¬μ΄μ˜ 거리λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€. μ΄λŠ” 두 점 μ‚¬μ΄μ˜ 거리 곡식을 μ‚¬μš©ν•˜μ—¬ 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. 쑰건별 계산: 적이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ 수λ₯Ό κ³„μ‚°ν•˜κΈ° μœ„ν•΄ λ‹€μŒ 쑰건을 κ³ λ €ν•©λ‹ˆλ‹€:
    • 두 원이 μΌμΉ˜ν•˜λŠ” 경우 (λ¬΄ν•œλŒ€μ˜ 접점)
    • 두 원이 μ„œλ‘œ λ‹€λ₯Έ 두 μ μ—μ„œ λ§Œλ‚˜λŠ” 경우 (두 개의 접점)
    • 두 원이 ν•˜λ‚˜μ˜ μ μ—μ„œ λ§Œλ‚˜λŠ” 경우 (ν•œ 개의 접점)
    • 두 원이 λ§Œλ‚˜μ§€ μ•ŠλŠ” 경우 (접점 μ—†μŒ)
  4. κ²°κ³Ό 좜λ ₯: κ³„μ‚°λœ μœ„μΉ˜μ˜ 수λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

μ½”λ“œ

import math

def calculate_positions(x1, y1, r1, x2, y2, r2):
    distance = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)

    if distance == 0 and r1 == r2:  
        return -1  # 두 원이 일치  
    elif distance > r1 + r2 or distance < abs(r1 - r2):  
        return 0  # 두 원이 λ§Œλ‚˜μ§€ μ•ŠμŒ  
    elif distance == r1 + r2 or distance == abs(r1 - r2):  
        return 1  # ν•œ μ μ—μ„œ λ§Œλ‚¨  
    else:  
        return 2  # 두 μ μ—μ„œ λ§Œλ‚¨

T = int(input())
for _ in range(T):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    print(calculate_positions(x1, y1, r1, x2, y2, r2))

풀이

- 두 점 μ‚¬μ΄μ˜ κ±°λ¦¬λŠ” ν”Όνƒ€κ³ λΌμŠ€ 정리λ₯Ό μ‚¬μš©ν•˜μ—¬ κ³„μ‚°ν•©λ‹ˆλ‹€.
- 두 μ›μ˜ μœ„μΉ˜ 관계λ₯Ό νŒλ‹¨ν•˜μ—¬ 적이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ 수λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.
- μ‘°κ±΄λ³„λ‘œ 적의 μœ„μΉ˜μ˜ 수λ₯Ό κ³„μ‚°ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.

python display

μ°Έκ³ ν•  λ§Œν•œ 자료

  1. ν”Όνƒ€κ³ λΌμŠ€ 정리: 두 점 μ‚¬μ΄μ˜ 거리λ₯Ό κ³„μ‚°ν•˜λŠ” 데 ν•„μš”ν•œ 기본적인 κΈ°ν•˜ν•™μ  μ›λ¦¬μž…λ‹ˆλ‹€.
  2. μ›μ˜ 방정식과 μ›μ˜ μœ„μΉ˜ 관계: 두 μ›μ˜ μœ„μΉ˜ 관계λ₯Ό μ΄ν•΄ν•˜κ³  κ³„μ‚°ν•˜λŠ” 방법에 λŒ€ν•œ μžλ£Œμž…λ‹ˆλ‹€.
  3. 쑰건문과 반볡문: Pythonμ—μ„œ 쑰건문과 반볡문의 μ‚¬μš© 방법과 μ˜ˆμ œμž…λ‹ˆλ‹€.

μΆ”μ²œ 링크:
- ν”Όνƒ€κ³ λΌμŠ€ 정리 μ„€λͺ…: [Math is Fun - Pythagorean Theorem](https://www.mathsisfun.com/pythagoras.html))
- μ›μ˜ 방정식과 μœ„μΉ˜ 관계: [Khan Academy - Circle Equations](https://www.khanacademy.org/math/geometry/hs-geo-circles))
- Python 쑰건문과 반볡문: [Python 곡식 λ¬Έμ„œ](https://docs.python.org/3/tutorial/controlflow.html))

λŒ“κΈ€