미소를뿌리는감자의 코딩

[백준 2024/01/17] 1002번 터렛 본문

코딩 테스트/백준

[백준 2024/01/17] 1002번 터렛

미뿌감 2024. 1. 17. 18:48
728x90

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

 

1002번: 터렛

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

www.acmicpc.net

 

1. 접근 방법

해당 문제는 두 원 사이의 접점의 개수를 구하는 것과 유사하다고 생각하였다.

따라서 발생할 수 있는 경우들을 그리기 시작하였다.

rough draft

7가지의 경우의 수가 가능하다고 생각하였다.

이후 이를 2개씩 묶어, if else문을 구성하였다.

 

코드 구체화

 

이를 다시 적어보면,

1)만약 두 좌표의 거리가 같을 때,

|-- 같은 거리를 지닐 때 -> -1

|-- 다른 거리를 지닐 때 -> 0

 

2) 두 좌표의 거리 >= 반지름 합

|-- 같을 경우 -> 1

|-- 클 경우  -> 0

 

3) 두 좌표 사이의 거리 + 작은 원의 반지금 <= 큰 원의 반지름

|-- 같을 경우 -> 1

|-- 클 경우  -> 0

 

4) 두 점의 겹치는 점을 가질 때 -> 2

 

이런식으로 if else문을 구성하였다.

 

2. 코드

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String n = scanner.nextLine();
        int number = Integer.parseInt(n);

        for (int i=0; i<number;i++){
            String line = scanner.nextLine();
            String[] numbers = line.split("\\s+");

            int x1 = Integer.parseInt(numbers[0]);
            int y1 = Integer.parseInt(numbers[1]);
            int r1 = Integer.parseInt(numbers[2]);
            int x2 = Integer.parseInt(numbers[3]);
            int y2 = Integer.parseInt(numbers[4]);
            int r2 = Integer.parseInt(numbers[5]);
            int location;

            double d = Math.sqrt(Math.pow((x1-x2),2) + Math.pow((y1-y2),2));

            if((x1==x2)&&(y1==y2)){
                if(r1==r2){
                    location = -1;
                }
                else{
                    location = 0;
                }
            }
            else if(d>=(r1+r2)){
                if(d==(r1+r2)){
                    location = 1;
                }
                else{
                    location = 0;
                }
            }
            else if((d + Math.min(r1,r2))<=Math.max(r1,r2)){
                if((d + Math.min(r1,r2))==Math.max(r1,r2)){
                    location = 1;
                }
                else{
                    location = 0;
                }
            }
            else{
                location = 2;
            }
            System.out.println(location);
        }

    }

}
728x90

'코딩 테스트 > 백준' 카테고리의 다른 글

[백준 2024/01/17] 10773번 제로  (0) 2024.01.17
[백준 2024/01/17] 10828번 스택  (0) 2024.01.17
[백준 2024/01/16] 1011번  (0) 2024.01.16
[백준 2024/01/16] 1110번  (0) 2024.01.16
[백준 2024/01/16] 1929번  (0) 2024.01.16