개발 창고/Algorithm

[백준] 1002번 터렛 - JAVA

로이제로 2024. 3. 18. 12:59
반응형


  • 문제
  • 풀이

문제

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

 

1002번: 터렛

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

www.acmicpc.net

문제 내용은 지적 재산 보호 차원에서 가져오지 않고 풀이만 공유드리도록 하겠습니다.


풀이

 제 풀이가 무조건적으로 맞는 것도 최적의 답변도 아니지만, 이런 풀이도 있다는 차원에서 작성해 보며, 좀 더 나은 방법이 있다면 이야기해 주셔도 도움 될 것 같습니다.

 

 풀이에 도움이 될 만한 내접과 외접에 대한 이론을 보시고 오시면 좀 더 도움 될 것 같습니다.

https://mathbang.net/101#gsc.tab=0

 

두 원의 위치관계, 내접, 외접

위치관계 또 나오네요. 이번에는 두 원의 위치관계에요. 위치관계 마지막이니까 정신 바짝 차리고 따라오세요. 원과 직선의 위치관계, 원의 할선과 접선, 접점에서 했던 것처럼 두 원이 어떤 관

mathbang.net

 

import java.util.Scanner;

/**
 * 백준 문제 1002
 * @author royzero
 *
 */
public class Main {
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		
		// Step. 반복 횟 수 입력
		int count = in.nextInt();
		
		// Step. 반복 횟 수 만큼 처리
		for(int i = 0; i < count; i++){
			// Step. 입력 값 분할
			int x1 = in.nextInt();
			int y1 = in.nextInt();
			int r1 = in.nextInt();
			int x2 = in.nextInt();
			int y2 = in.nextInt();
			int r2 = in.nextInt();
			
			// Step. 거리 계산
			// dist = sqrt((x2 - x1)^2 + (y2 - y1)^2)
			double distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
			
			int sum = r1 + r2;
			int sub = Math.abs(r1 - r2);
			
			// case 1 - 두 원이 정확히 겹칠 경우
			if (distance == 0 && r1 == r2) {
				System.out.println(-1);
				
			// case 2 - 두 원이 서로 겹치면서 인접하지 않는 경우
			} else if (distance < sub) {
				System.out.println(0);
				
			// case 3 - 두 원이 서로 겹치지 않으면서 인접하지 않는 경우
			} else if (distance > sum) {
				System.out.println(0);
				
			// case 4 - 두 원이 서로 겹치면서 인접하는 경우
			} else if (distance == sub) {
				System.out.println(1);
				
			// case 5 - 두 원이 서로 겹치지 않으면서 인접하는 경우
			} else if (distance == sum) {
				System.out.println(1);
				
			// case 6 - 두 원이 서로 겹치면서 인접하지 않는 경우
			} else {
				System.out.println(2);
			}
		}
		
		in.close();
	}
}

부끄럽게 여러번 틀림

 

반응형