22.02.23 백준 1002번

김민혁·2022년 2월 23일
0

하루한문제

목록 보기
15/22

문제

첫번째 제출한 답

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int t = sc.nextInt();
		
		sc.nextLine();
		
		for (int i = 0; i < t; i++) {
			String input = sc.nextLine();
			int x1 = Integer.parseInt(input.split(" ")[0]);
			int y1 = Integer.parseInt(input.split(" ")[1]);
			int r1 = Integer.parseInt(input.split(" ")[2]);
			int x2 = Integer.parseInt(input.split(" ")[3]);
			int y2 = Integer.parseInt(input.split(" ")[4]);
			int r2 = Integer.parseInt(input.split(" ")[5]);
			
			//두 좌표 사이의 거리
			double dist = Math.sqrt((Math.pow(x1-x2,2)+Math.pow(y1-y2, 2)));
			
			if(dist>Math.abs(r1-r2)&&dist<r1+r2) {
				//두점에서 만나는경우
				System.out.println(2);
			} else if(dist==r1+r2||dist==Math.abs(r1-r2)) {
				//외접, 내접
				System.out.println(1);
			} else if(dist>r1+r2||dist<Math.abs(r1-r2)) {
				// 만나지 않는경우
				System.out.println(0);
			} else if(dist == 0) {
				//좌표가 일치하는경우
				if(r1!=r2) {
					// 반지름길이가 다른경우
					System.out.println(0);
				} else {
					// 반지름 길이가 같은경우 (같은원일경우)
					System.out.println(-1);
				}
			}
	
		}
	}
}

접근방식 -> 각 사람의 좌표에서 계산한 적의 위치들을 선으로 연결했을때 반지름이 각각 r1,r2인 원이 되고 즉 적이 있을수 있는 위치는 두 원이 만나는 점의 수이다. 즉 두원이 만나는 조건에 따라 값을 나눠서 출력한다.

결과 -> 오답

문제점 -> 테스트 결과 같은 원이 입력으로 들어왔을때 1이 출력되었다

원인 -> 같은 원이 입력으로 들어왔을때 Math.abs(r1-r2)가 0이기 때문에 첫번째 else if문을 타게 되어 1이 출력되었다.

해결방법 -> 첫번째 else if 문 안에 조건을 추가한다.

두번째 제출한답

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int t = sc.nextInt();
		
		sc.nextLine();
		
		for (int i = 0; i < t; i++) {
			String input = sc.nextLine();
			int x1 = Integer.parseInt(input.split(" ")[0]);
			int y1 = Integer.parseInt(input.split(" ")[1]);
			int r1 = Integer.parseInt(input.split(" ")[2]);
			int x2 = Integer.parseInt(input.split(" ")[3]);
			int y2 = Integer.parseInt(input.split(" ")[4]);
			int r2 = Integer.parseInt(input.split(" ")[5]);
			
			//두 좌표 사이의 거리
			double dist = Math.sqrt((Math.pow(x1-x2,2)+Math.pow(y1-y2, 2)));
			
			if(dist>Math.abs(r1-r2)&&dist<r1+r2) {
				//두점에서 만나는경우
				System.out.println(2);
			} else if(dist==r1+r2||dist==Math.abs(r1-r2)) {
				if(dist!=0) {
					//외접, 내접
					System.out.println(1);
				} else {
					//같은 원일경우
					System.out.println(-1);
				}
			} else if(dist>r1+r2||dist<Math.abs(r1-r2)) {
				// 만나지 않는경우
				System.out.println(0);
			} else if(dist == 0) {
				//좌표가 일치하고 반지름 길이가 다를경우
				System.out.println(0);
			}
	
		}
		
		
		
	}
}

결과-> 정답

참고 : 좌표사이의 거리,두 원의 관계

profile
안녕하세요 김민혁입니다.

0개의 댓글