개발 창고/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는

  1. 시작점과 도착점이 행성 내부에 있는 경우만 Count한다.
  2. 시작점과 도착점이 모두 동일 행성 내부에 있는 경우 Count 하지 않는다. (이 부분을 놓쳐서 실패를,,)

 

 입니다.

 

 풀이 순서는

  1. 시작 점과 행성과의 거리를 구한다.
  2. 도착 점과 행성과의 거리를 구한다.
  3. 시작 점과 행성과의 거리가 반지름보다 작고 도착 점과 행성과의 거리가 반지름 보다 크거나 같은 경우 +1
  4. 도착 점과 행성과의 거리가 반지름보다 작고 시작 점과 행성과의 거리가 반지름 보다 크거나 같은 경우 +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

 

반응형