[파이썬] 1002번. 터렛 풀이

2023. 2. 20. 17:52·알고리즘과 코딩 테스트/백준 25단계

[이 문제의 핵심]

== 을 사용할 때는 주의하자! 컴퓨터는 모든 실수를 정확하게 저장하지 않는다.

 

import math

T = int(input())

for _ in range(T):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    if (x1 == x2 and y1 == y2 and r1 == r2): # 같은 좌표에서 같은 반지름이면 원이 겹친다.
        print(-1)
        continue

    if (r2 > r1): # r2는 항상 r1보다 작게끔 한다.
        (x1, y1, r1, x2, y2, r2) = (x2, y2, r2, x1, y1, r1)

경우의 수를 쉽게 생각하기 위해, 두 번째 좌표의 반지름 r2는 r1보다 무조건 작도록 하였다.

 

 

    xy_distance_pow = (x1 - x2) ** 2 + (y1 - y2) ** 2
    xy_distance = math.sqrt(xy_distance_pow)

중요한 대목이다.

xy_distance_pow는 int로 남아있도록 루트를 계산하지 않았다.

이는 전에 설명했다시피 등호(==)를 사용할 때, 실수 값끼리 비교하지 않게 하기 위해서이다.

 

 

    if (xy_distance_pow == r1 ** 2): # 점 2가 점 1의 원 경계에 위치할 때
        print(2)
        continue
    elif (xy_distance_pow < r1 ** 2): # 점 2가 점 1의 원 안에 위치할 때
        if (xy_distance + r2 < r1): # 점 2의 원이 점 1의 원에 못 미칠때
            print(0)
            continue
        elif (xy_distance + r2 > r1): # 점 2의 원이 점 1의 원을 넘을 때
            print(2)
            continue
        else: # 점 2의 원이 딱 점 1의 원과 내접할 때
            print(1)
            continue
    else: # 점 2가 점 1의 원 밖에 위치할 때
        if (xy_distance > (r1 + r2)): # 두 원이 서로 닿지 않으면
            print(0)
            continue
        elif (xy_distance < (r1 + r2)): # 두 점 사이의 거리보다 두 반지름의 합이 크면
            print(2)
            continue
        else: # 두 점사이의 거리가 두 반지름의 합과 같다면
            print(1) # 1개 겹친다.
            continue

나머지 코드는 가능한 경우에 맞게 생각하면 된다.

  1. 두 원이 일치할 때, 답은 -1
  2. 두 원이 외접할 때, 답은 1
  3. 두 원이 내접할 때, 답은 1
  4. 두 원이 서로 떨어져 있고 만나지 않을 때, 답은 0
  5. 한 원이 다른 원의 내부에 있고 두 원이 만나지 않을 때, 답은 0
  6. 나머지의 경우, 답은 2

 

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

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

 

'알고리즘과 코딩 테스트 > 백준 25단계' 카테고리의 다른 글

[파이썬] 2004번. 조합 0의 개수 풀이  (0) 2023.02.24
[파이썬] 9375번. 패션왕 신해빈 풀이  (0) 2023.02.22
[파이썬] 2981번. 검문 풀이  (1) 2023.02.21
[파이썬] 2477번. 참외밭 풀이  (0) 2023.02.13
[파이썬] 3009번. 네 번째 점 풀이  (0) 2023.02.12
'알고리즘과 코딩 테스트/백준 25단계' 카테고리의 다른 글
  • [파이썬] 9375번. 패션왕 신해빈 풀이
  • [파이썬] 2981번. 검문 풀이
  • [파이썬] 2477번. 참외밭 풀이
  • [파이썬] 3009번. 네 번째 점 풀이
달거달거
달거달거
개발자를 꿈꿉니다
  • 달거달거
    SWEE IT
    달거달거
  • 전체
    오늘
    어제
    • 분류 전체보기 (288)
      • 개발 환경 (5)
        • VSCode (1)
        • 파이썬 (Anaconda) (1)
        • Git (1)
        • Flutter (0)
        • Kotlin (1)
      • Spring (5)
        • 스프링 부트와 JPA 실무 완전 정복 로드맵 (2)
        • 스프링 부트와 AWS로 구현하는 웹 서비스 (1)
        • 채쌤의 스프링 부트 프로젝트 (1)
      • 알고리즘과 코딩 테스트 (16)
        • 파이썬 문법 (2)
        • 백준 25단계 (10)
        • 프로그래머스 코딩 테스트 고득점 Kit (1)
        • 코틀린 문법 (1)
      • 요리 (236)
      • 데이터베이스 (2)
        • MySQL (2)
      • 안드로이드 (11)
        • 연습 코드 (6)
        • 도서 내용 정리 (4)
      • Dart와 Flutter (5)
        • 도서 내용 정리 (4)
        • Flutter 위젯 정리 (1)
        • 15개 프로젝트 (2)
      • 피그마 (0)
        • 도서 내용 정리 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    mysql
    vscode
    docker
    주석
    문법
    c++
    백준
    오블완
    데이터베이스
    안드로이드
    AWS
    node.js
    파이썬
    프로그래머스
    git
    JPA
    spring
    Flutter
    코딩 테스트
    머신러닝
    알고리즘
    DART
    코틀린
    C
    아나콘다
    자취요리
    피그마
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
달거달거
[파이썬] 1002번. 터렛 풀이
상단으로

티스토리툴바