개발 창고/Algorithm
[백준] 1004 어린 왕자 - JAVA
로이제로
2024. 3. 20. 08:51
반응형
- 문제
- 풀이
문제
https://blog.itcode.dev/posts/2021/05/22/a1004
문제 내용은 지적 재산 보호 차원에서 가져오지 않고 풀이만 공유드리도록 하겠습니다.
풀이
제 풀이가 무조건적으로 맞는 것도 최적의 답변도 아니지만, 이런 풀이도 있다는 차원에서 작성해 보며, 좀 더 나은 방법이 있다면 이야기해 주셔도 도움 될 것 같습니다.
문제의 key는
- 시작점과 도착점이 행성 내부에 있는 경우만 Count한다.
- 시작점과 도착점이 모두 동일 행성 내부에 있는 경우 Count 하지 않는다. (이 부분을 놓쳐서 실패를,,)
입니다.
풀이 순서는
- 시작 점과 행성과의 거리를 구한다.
- 도착 점과 행성과의 거리를 구한다.
- 시작 점과 행성과의 거리가 반지름보다 작고 도착 점과 행성과의 거리가 반지름 보다 크거나 같은 경우 +1
- 도착 점과 행성과의 거리가 반지름보다 작고 시작 점과 행성과의 거리가 반지름 보다 크거나 같은 경우 +1
import java.util.Scanner;
/**
* 백준 문제 1004 - 어린 왕자
* @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 result = 0;
// Step. (x1, y1), (x2, y2) 좌표 입력
int x1 = in.nextInt();
int y1 = in.nextInt();
int x2 = in.nextInt();
int y2 = in.nextInt();
// Step. 행성 개수 입력
int n = in.nextInt();
// Step. 행성 좌표 + 반지름 입력 (cx, cy, cr)
for(int j = 0; j < n; j++){
int cx = in.nextInt();
int cy = in.nextInt();
int cr = in.nextInt();
// Step. 출발점과 행성의 거리 계산
// dist = sqrt((x2 - x1)^2 + (y2 - y1)^2)
double distS = Math.sqrt(Math.pow(cx - x1, 2) + Math.pow(cy - y1, 2));
// Step. 도착점과 행성의 거리 계산
// dist = sqrt((x2 - x1)^2 + (y2 - y1)^2)
double distE = Math.sqrt(Math.pow(cx - x2, 2) + Math.pow(cy - y2, 2));
if(distS < cr && distE >= cr) result++;
if(distE < cr && distS >= cr) result++;
}
System.out.println(result);
}
in.close();
}
}
※ 참고
2024.03.18 - [개발 창고/Algorithm] - [백준] 1002번 터렛 - JAVA
반응형