미소를뿌리는감자의 코딩
[백준 2024/01/17] 1002번 터렛 본문
728x90
https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다.
www.acmicpc.net
1. 접근 방법
해당 문제는 두 원 사이의 접점의 개수를 구하는 것과 유사하다고 생각하였다.
따라서 발생할 수 있는 경우들을 그리기 시작하였다.
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번 스택 (1) | 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 |