개발 창고/Algorithm
[백준] 1004 어린 왕자 - JAVA
로이제로
2024. 3. 20. 08:51
반응형
- 문제
- 풀이
문제
https://blog.itcode.dev/posts/2021/05/22/a1004
[백준 / JAVA] 백준 알고리즘 1004번 어린 왕자 - 𝝅번째 알파카의 개발 낙서장
어린 왕자는 소혹성 B-664에서 자신이 사랑하는 한 송이 장미를 위해 살아간다. 어느 날 장미가 위험에 빠지게 된 것을 알게 된 어린 왕자는, 장미를 구하기 위해 은하수를 따라 긴 여행을 하기 시
blog.itcode.dev
문제 내용은 지적 재산 보호 차원에서 가져오지 않고 풀이만 공유드리도록 하겠습니다.
풀이
제 풀이가 무조건적으로 맞는 것도 최적의 답변도 아니지만, 이런 풀이도 있다는 차원에서 작성해 보며, 좀 더 나은 방법이 있다면 이야기해 주셔도 도움 될 것 같습니다.
문제의 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
[백준] 1002번 터렛 - JAVA
문제 풀이 문제 https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$
royzero.tistory.com
반응형