728x90
반응형
2024.07.26기준 - 실버3
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 출발점과 도착점과 행성의 위치가 주어 졌을때, 몇번의 행성의 이탈과 진입을 했는지 출력하는 문제입니다.
핵심은 출발점과 도착점이랑 연관된 행성을 제외하고는 돌아가면 되기 때문에 계산을 할 필요가 없다는 것입니다.
행성의 위치와 반지름을 입력받고, 그 행성의 중심의 기준으로 출발점 또는 도착점의 거리가 반지름 보다 작다면 원 안에 있다는 말이 됩니다.
1. 만약 행성안에 출발점이 있을때, 도착점이 밖에 있어야 이탈을 할 수 있습니다.
2. 또한 행성안에 도착점이 있다면, 출발점이 밖에 있어야 진입을 할 수 있습니다.
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
StringTokenizer st;
int count, startx, starty, endx, endy, n, planetx, planety, planetr;
double startdis, enddis;
while (t-- > 0) {
count = 0; // 진입, 이탈 횟수
st = new StringTokenizer(br.readLine());
startx = Integer.parseInt(st.nextToken()); // 출발점 x좌표
starty = Integer.parseInt(st.nextToken()); // 출발점 y좌표
endx = Integer.parseInt(st.nextToken()); // 도착점 x좌표
endy = Integer.parseInt(st.nextToken()); // 도착점 y좌표
n = Integer.parseInt(br.readLine()); // 행성의 개수
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
planetx = Integer.parseInt(st.nextToken()); // 행성의 x좌표
planety = Integer.parseInt(st.nextToken()); // 행성의 y좌표
planetr = Integer.parseInt(st.nextToken()); // 행성의 반지름
startdis = Math.sqrt(Math.pow(startx - planetx, 2) + Math.pow(starty - planety, 2)); // 행성에서 출발점 까지의 거리
enddis = Math.sqrt((Math.pow(endx - planetx, 2) + Math.pow(endy - planety, 2))); // 행성에서 도착점 까지의 거리
// 원 안에 출발점이 있는지 확인하면서 도착점은 밖에 잇는지 확인
if (startdis <= planetr && enddis > planetr) {
count++;
}
// 원 안에 도착점이 있으면서 출발점은 밖에 있는지 확인.
if (enddis <= planetr && startdis > planetr) {
count++;
}
}
sb.append(count).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 11403번 경로 찾기 (0) | 2024.07.27 |
---|---|
BEAKJOON / 백준 - JAVA 21567번 숫자의 개수 2 (0) | 2024.07.26 |
BEAKJOON / 백준 - JAVA 32025번 체육은 수학과목 입니다 (0) | 2024.07.26 |
BEAKJOON / 백준 - JAVA 31995번 게임말 올려놓기 (0) | 2024.07.25 |
BEAKJOON / 백준 - JAVA 32068번 보물 찾기 (0) | 2024.07.25 |