반응형
분류: 기본수학2
▶문제
▶코드
//백준알고리즘 제출시 클래스 이름은 Main으로 바꿔야 됨
package math_2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class p1002 {
//터렛
public static void main(String[] args) {
//입력 : x1, y1, r1, x2, y2, r2
try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));){
int n = Integer.parseInt(br.readLine());
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int r1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
int r2 = Integer.parseInt(st.nextToken());
int d = (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);//sqrt쓰면 실수 오차있을 가능성 있어서 제곱한 채로 비교
int r = (r1+r2)*(r1+r2);
int subR= (r1-r2)*(r1-r2);//두 반지름의 차이 의 제곱
//거리가 0일때
if(d==0) {
if(r1==r2) bw.write("-1\n");
else bw.write("0\n");
}
else {//거리가 0이상일때
if(r==d || subR==d) bw.write("1\n");
else if(r>d && subR<d) bw.write("2\n"); //이게 살짝 헷갈렸음
else bw.write("0\n");
}
}
br.close();bw.close();
}catch (Exception e) {e.printStackTrace();}
}
}
▶처음에 너무 쉽게 봤다가 다시 케이스를 나눴다. 한 원이 안에 있을 경우를 계산하지 않은것..
d>0일때
(2) d=r1+r2 이거나 (3) d=r1-r2
->1개
(1) d<r1+r2 이고 r1-r2<d
: 내접하는 경우(3) 초과 ~ 외접하는 경우(1) 미만
->2개
d=0일때
완전 겹치는 경우 r1=r2는
무한개 -> -1
채점결과
링크 www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
반응형
'백준알고리즘' 카테고리의 다른 글
백준알고리즘:p1427 소트인사이드 (0) | 2021.04.06 |
---|---|
백준알고리즘:p2108 통계학 (0) | 2021.04.05 |
백준알고리즘:p3053 택시 기하학 (0) | 2021.04.02 |
백준알고리즘:p11729 하노이 탑 이동 순서 (0) | 2021.04.01 |
백준알고리즘:p3009 네 번째 점 (0) | 2021.03.31 |
댓글