728x90
2022.05.18 - [알고리즘공부(AlgorithmStudy)/문제풀이(ProblemSolving)] - 백준 1004 java - 어린왕자(기하)
종전에 풀었던 어린왕자와 같이 원의 방정식과 좌표평면 상의 거리구하기 개념으로 접근하면 바로 풀린다.
기하는 그냥 아냐 모르냐의 개념이기에 바로 소스코드 들어간다.
<문제 접근/풀이 과정>
1.1 x <= px <= x + w && y <= py <= y + h ( 직사각형 내에 하키선수가 존재하는 지)
1.2 (x - px)^2 + (y+h/2 - py)^2 <= (h/2)^2 (왼쪽 원 내에 하키선수가 존재하는 지)
1.3 (x + width - px)^2 + (y+h/2 - py)^2 <= (h/2)^2 (오른쪽 원 내에 하키선수가 존재하는 지)
2. 1의 3가지 조건을 만족하는 갯수를 구하면 된다.
3. 여기서 오른쪽, 왼쪽 원의 경우 반지름으로만 경기장이 구성되어 있지만 이미 가운데 직사각형 내에 원이 포함되므로 1.2, 1.3처럼 원 전체의 둘레 안에 있는지 확인해도 무방하다.
<소스코드>
package boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Boj_1358 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stz = new StringTokenizer(br.readLine());
int W = Integer.parseInt(stz.nextToken());
int H = Integer.parseInt(stz.nextToken());
int X = Integer.parseInt(stz.nextToken());
int Y = Integer.parseInt(stz.nextToken());
int P = Integer.parseInt(stz.nextToken());
// x <= px <= x + w
// y <= py <= y + h
// (x - px)^2 + (y+h/2 - py)^2 <= (h/2)^2
// (x + width - px)^2 + (y+h/2 - py)^2 <= (h/2)^2
int answer = 0;
for (int i = 0; i < P; i++) {
stz = new StringTokenizer(br.readLine());
int px = Integer.parseInt(stz.nextToken());
int py = Integer.parseInt(stz.nextToken());
double leftR = Math.pow(X-px, 2)+Math.pow(Y+1.0*H/2-py, 2);
double rightR = Math.pow(X+W-px, 2)+Math.pow(Y+1.0*H/2-py, 2);
double rr = Math.pow(1.0*H/2, 2);
if(X <= px && px <= X+W && Y <= py && py <= Y + H || leftR <= rr || rightR <= rr) answer++;
}
System.out.println(answer);
}
}
이제 백준 단계별로 풀기 25단계까지 14문제 남았다. 얼른 풀고 클래스 밀기, 프로그래머스 풀어야지...!
728x90
'알고리즘공부(Algorithm Study) > 문제풀이(ProblemSolving)' 카테고리의 다른 글
백준 1520 java - 내리막길(DP, 동적계획법) (0) | 2022.05.23 |
---|---|
백준 11049 java - 행렬 곱셈 순서(DP/동적계획법) (0) | 2022.05.22 |
백준 1004 java - 어린왕자(기하) (0) | 2022.05.18 |
백준 2477 java - 참외밭(기하) (0) | 2022.05.18 |
백준 11660 java - 구간 합 구하기 5(누적합) (0) | 2022.05.13 |
댓글