코딩테스트

[BOJ/백준] 32195 야구 정답 코드

jinsang-2 2024. 9. 6. 19:20

https://www.acmicpc.net/problem/32195

 

import sys
input=sys.stdin.readline
N=int(input())

# N개의 타구의 좌표
hits = []
foul_flags=[]
distances=[]
for i in range(N):
    x,y=map(int,input().split())
    hits.append((x,y))
    # 파울 확인 코드
    if y<x or y<-x:
        # 파울인 경우
        foul_flags.append(True)
    else:
        # 파울이 아닌 경우
        foul_flags.append(False)
        distances.append(x**2 + y**2)
# 파울 아닌 타구들의 거리 제곱 값을 정렬
distances.sort()

# Q개의 담장 거리 후보
Q=int(input())
# 담장까지의 거리 리스트 
R_list = []
for i in range(Q):
    R_list.append(int(input()))

def binary_search(arr,target):
    low, high = 0, len(arr)-1
    while low <= high:
        mid = (low+high) //2
        if arr[mid] <=target:
            low = mid +1
        else:
            high = mid -1
    return low

# 각 거리 후보에 대한 파울, 내야, 홈런의 개수를 저장할 리스트
result = []

for R in R_list:
    foul = 0
    infield = 0
    homerun = 0
    R_squared = R**2

    foul_count = sum(foul_flags)    

    infield_count = binary_search(distances, R_squared)
    homerun_count = len(distances) - infield_count
    
    result.append(f"{foul_count} {infield_count} {homerun_count}")

sys.stdout.write("\n".join(result) + "\n")