백준 1002 - 터렛

1 minute read

Published:

링크

개요

문제에서 요구하는 것

  • 다른 좌표를 원점으로하는 두원의 접점 개수를 반환하도록 메소드를 구현.

난이도

solve.ac 난이도 : 실버3
개인 난이도 : 0.4/5

문제에서 어려움

  1. 접점 개수 반환 메소드의 로직을 어떻게 짤 것인가?

기하학에서 관련된 식이 이미 마련되어있음.
이를 이용하면 됨.

  • 두 원이 원점을 공유하면 반지름이 같으면 접점이 무한대, 다르면 0
  • 두 원의 원점 사이 거리가 지름의 합 보다 작고 지름의 차 보다 크면 2
  • 위 조건에서 같은 경우는 1
  • 위 조건 어느것도 만족 x 시 0

코드

//위의 메소드를 구현한 부분.
public static int calc(Scanner scan){
    int xa, xb;
    int ya, yb;
    int adia, bdia;

    xa = scan.nextInt();
    ya = scan.nextInt();
    adia = scan.nextInt();
    xb = scan.nextInt();
    yb = scan.nextInt();
    bdia = scan.nextInt(); 

    double distance = Math.sqrt(Math.abs((xa-xb)*(xa-xb))+Math.abs((ya-yb)*(ya-yb)));
    int bigdia = Math.max(adia,bdia);
    int smalldia = Math.min(adia,bdia);

    if(distance == 0){
      if(adia == bdia)
      return -1;
      return 0;
    } //조건 1

    if(bigdia+smalldia> distance&& bigdia-smalldia<distance){
      return 2;
    }//조건 2
    else if(bigdia+smalldia == distance||bigdia-smalldia== distance)
    return 1;//조건 3
    else{
      return 0;
    }//그 어느 것도 만족 x

  }

이문제 풀이에 필요한 지식.

보완해야 할 부분.

두 원사이의 관계를 안다면 쉽게 풀릴 문제이나 직접 해당 관계를 파악하려고 헛짓하다가 시간만 날라감. 이러한 수학적인 문제의 해법은 이미 널리 알려져있다.
이미 배운내용이나, 문제에서 묻는 핵심이 아닌 이런 것들은 적당히 찾아서 구현하자.
괜히 대학교 시험이 다 오픈북이겠는가.

다른사람 코드와 비교