λ°±μ€€

λ°±μ€€ 1002 ν„°λ › - 파이썬

stoneeee 2022. 12. 30. 16:36

 

 

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

 

1002번: ν„°λ ›

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

www.acmicpc.net

 

 

 

두 μ›μ˜ ꡐ점의 수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€.

μ€‘ν•™κ΅μ˜€λ‚˜ κ³ λ“±ν•™κ΅μ˜€λ‚˜ λ¨Ό 과거에 λ°°μ› λ˜ λ‚΄μš©μΈλ°, 경우만 잘 λ”°μ Έμ£Όλ©΄ λœλ‹€.

 

 

 

 

λ¨Όμ €, 두 점 μ‚¬μ΄μ˜ 거리 곡식을 μ΄μš©ν•΄ μ›μ˜ 쀑심 μ‚¬μ΄μ˜ 거리인 dλ₯Ό ꡬ해쀀닀.

 

 

#1  μ›μ˜ 쀑심이 λ™μΌν•˜κ³  λ°˜μ§€λ¦„λ„ λ™μΌν•˜λ‹€λ©΄ 두 원이 μ„œλ‘œ κ°™κ³ , μ ‘μ μ˜ κ°œμˆ˜κ°€ λ¬΄ν•œλŒ€μ΄λ‹€. -1을 좜λ ₯ν•œλ‹€.

 

#2  두 μ›μ˜ λ°˜μ§€λ¦„μ˜ ν•©(r1 + r2)이 d와 κ°™κ±°λ‚˜ λ°˜μ§€λ¦„μ˜ μ°¨(abs(r1 - r2))κ°€ d와 κ°™λ‹€λ©΄ 각각 μ™Έμ ‘, λ‚΄μ ‘ν•˜λŠ” κ²½μš°μ΄λ‹€. 접점이 ν•˜λ‚˜μ΄λ―€λ‘œ 1을 좜λ ₯ν•œλ‹€.

 

μ™Έμ ‘
λ‚΄μ ‘
λ‚΄μ ‘

 

#3  두 원이 μ™Έμ ‘ν•΄μžˆλŠ” μƒνƒœμ—μ„œ λ‚΄μ ‘ μƒνƒœκ°€ 될 λ•Œ κΉŒμ§€ 원 ν•˜λ‚˜λ₯Ό μ΄λ™μ‹œμΌœ 보자. κ·Έ μ‚¬μ΄μ˜ λͺ¨λ“  μˆœκ°„μ—λŠ” 두 μ›μ˜ ꡐ점이 2κ°œμ΄λ‹€. 그리고 μ‹μœΌλ‘œ μ •λ¦¬ν•˜μžλ©΄ abs(r1 - r2) < d < r1 + r2 라고 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

 

두 원이 λ‘κ°œμ˜ μ μ—μ„œ λ§Œλ‚¨

 

#4  κ·Έ λ°–μ˜ λͺ¨λ“  κ²½μš°λŠ” ν•œ 원이 λ‹€λ₯Έ 원 내뢀에 μ‘΄μž¬ν•˜λŠ” κ²½μš°μ΄λ‹€. ꡐ점이 μ—†λ‹€.

 

ν•œ 원이 λ‹€λ₯Έ μ›μ˜ λ‚΄λΆ€

 

 

 

for _ in range(int(input())):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    
    # 두 μ›μ˜ 쀑심 μ‚¬μ΄μ˜ 거리
    d = ((x1-x2)**2 + (y1-y2)**2) ** 0.5
    
    # 1. 두 원이 동일함
    if x1 == x2 and y1 == y2 and r1 == r2: 
        print(-1)
    # 2. 두 원이 μ„œλ‘œ 접함
    elif r1 + r2 == d or abs(r1 - r2) == d:
        print(1)
    # 3. 두 원이 μ„œλ‘œ λ‹€λ₯Έ 두 μ μ—μ„œ λ§Œλ‚¨
    elif abs(r1 - r2) < d < r1 + r2:
        print(2)
    # 4. ν•œ 원이 λ‹€λ₯Έ μ›μ˜ 내뢀에 μžˆκ±°λ‚˜ 두 원이 μ„œλ‘œ λ–¨μ–΄μ Έ 있음
    else:
        print(0)