[Algorithm] 백준 1002

ZEDY·2024년 3월 9일
0

문제

이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.

조규현의 좌표
(x1,y1)(x_1, y_1)와 백승환의 좌표
(x2,y2)(x_2, y_2)가 주어지고, 조규현이 계산한 류재명과의 거리
r1r_1과 백승환이 계산한 류재명과의 거리
r2r_2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.

풀이

내가 생각한 알고리즘

조규현-류재명 거리
백승환-류재명 거리
를 반지름으로 하는 원을 그린 다음에, 겹치는 점을 생각하였다.

  1. 접점이 0개인 경우
  • 두 원이 멀리 떨어져 있거나
  • 한 원 안에 한 원이 있거나
  1. 접점이 1개인 경우
  • 두 원이 맞닿아 있는 경우
    • 안에 맞닿아 있는 경우
    • 밖에 맞닿아 았는 경우
  1. 접점이 2개인 경우
  • 일부분이 겹쳐 있는 경우
  1. 접점이 무한대인 경우
  • 일치하는 경우

이렇게 생각을 하고 연산을 하였다.

코드

import math
n = int(input())


for i in range(0, n):
    x_1, y_1, r_1, x_2, y_2, r_2 = map(int, input().split(' '))
    distance = math.sqrt((x_1-x_2)**2 + (y_1-y_2)**2)
    if r_1 > r_2:
        temp = r_2
        r_2 = r_1
        r_1 = temp
    if distance == r_1 + r_2:
        print(1)
    elif distance > r_1 + r_2:
        print(0)
    elif distance == 0 and r_1 == r_2:
        print(-1)
    elif distance < r_1 + r_2:
        if distance + r_1 < r_2:
            print(0)
        elif distance + r_1 == r_2:
            print(1)
        else:
            print(2)

Lesson Learn

이 문제는 연산 문제여서 모든 경우의 수를 생각하는 것이 가장 중요했다.

profile
Spring Boot 백엔드 주니어 개발자

0개의 댓글