본문 바로가기

알고리즘

Boj 1358. 하키

백준 1358. 하키

 

풀이 

① 왼쪽 반원에 포함될 때 카운트

② 가운데 직사각형에 포함될 때 카운트

③ 오른쪽 반원에 포함될 때 카운트

 

 

반원에 포함될 때 풀이는  (a,b)에서 원의 중심까지의 거리 <= 반지름의 길이 이어야 한다.

즉, 이 문제에선 두 점 사이의 거리 공식이 들어갔다.

 

 

 

 

 

 

이것을 소스코드로 나타내면

 

#include <stdio.h>
 
 
int main(void)
{
    int W, H, X, Y, P;
    int count = 0;
    scanf("%d %d %d %d %d", &W, &H, &X, &Y, &P);
    while (P--)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        
        if ((a - X)*(a - X) + (b - (Y + H / 2))*(b - (Y + H / 2)) <= (H / 2)*(H / 2) && a < X)
            count++;
        else if (X <= a&&a <= X + W&&Y <= b&&b <= Y + H)
            count++;
 
 
 
        else if ((a - (X + W))*(a - (W + X)) + (b - (Y + H / 2))*(b - (Y + H / 2)) <= (H / 2)*(H / 2) && X + W < a)
            count++;
    }
    printf("%d", count);
    return 0;
 
    
}