티스토리 뷰

알고리즘/백준

[BAEJOON] 1358 하키

응애~ 개발자 2022. 8. 26. 21:19
728x90
반응형

하키 문제

문제 요약

  • 알고리즘 분류: 기하힉
  • 문제난이도: SILVER4
  • 문제 내용
    • 반지름(R)은 높이 / 2 
    • (X, Y)와 부터 넓이 높이로 범위와 반지름 중심점인 (X, Y + R), (X + W, Y + R) 좌우원
    • 범위안의 선수 명 명인지 구해라

 

문제 풀이

  1. 사각형 범위안, 좌우 원 범위 안을 구한다.
  2. 원안의 범위 구하기
    • 원 중심점(Xr. Yr), 선수 위치(x, r)에서 반지름 길이 보다 작으면 원안에 포함이 된다.
    • 공식: (Xr - x) ^ 2 + (Yr - y)^2 <= R^2

코드

PYTHON

W, H, X, Y, P = map(int, input().split())
R = H /2
count = 0
for _ in range(P):
    x, y = map(int, input().split())
    if (X - x) ** 2 + (Y + R - y) ** 2 <= R ** 2:
        count += 1
    elif (X + W - x) ** 2 + (Y + R - y) ** 2 <= R ** 2:
        count += 1
    elif x >= X and x <= (X + W) and y >= Y and y <= (Y + H):
        count += 1
print(count)

JAVA

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine()); 
	    float W = Float.parseFloat(st.nextToken());
	    float H = Float.parseFloat(st.nextToken());
	    float X = Float.parseFloat(st.nextToken());
	    float Y = Float.parseFloat(st.nextToken());
	    float P = Float.parseFloat(st.nextToken());
	    float R = H / 2;

	    
	    int count = 0;
	    
		for(int t = 0; t < P; t++) {
			st = new StringTokenizer(br.readLine());
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());
			if(Math.pow(X - x, 2) + Math.pow(Y + R - y, 2) <= Math.pow(R, 2)) {
				count++;
			}else if(Math.pow(X + W - x, 2) + Math.pow(Y + R - y, 2) <= Math.pow(R, 2)) {
				count++;
			}else if( x >= X &&  x <= (X + W) && y >= Y && y <= (Y + H)) {
				count++;
			}
		}
		
		System.out.println(count);	    
	}
	    
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[BAEJOON] 1037 약수  (0) 2022.09.06
[BAEJOON] 5058 배수와 약수  (0) 2022.09.06
[BAEJOON] 1004 어린 왕자  (0) 2022.08.23
[BAEKJOON] 2738 행렬 덧셈  (0) 2022.08.22
[BAEJOON] 2477 참외밭  (0) 2022.08.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함