[BOJ] Q2110 공유기 설치
[BOJ] Q2110 공유기 설치
Question
Language: Python
Difficulty: Gold 5
우선 입력 조건을 보면 집의 좌표가 1~10억까지이므로 이를 순차적으로 탐색하게 되면 시간 초과가 발생하게 된다. –> 이분 탐색을 이용해서 풀이하라는 문제이다.
공유기를 총 3대 설치했을 때의, 공유기간 간격을 최대화하고 싶다는 의미이다.
그러면 공유기 간 간격에 대해 이분탐색을 진행하면 될 것 같다
공유기 간격을 1~(max_coordinate - min_coordinate)에 대해서 이분탐색을 진행하면서, 만약 공유기의 개수가 초과하게 되는 경우 간격을 넓히고, 공유기 개수가 부족한 경우 간격을 좁히는 식으로 이분탐색을 수행해본다.
Solution
def solution(coordinates, antennas):
coordinates.sort()
start=1
end=coordinates[-1]-coordinates[0]
result=0
while start <= end:
med=(start+end)//2
count=1
starting_point=coordinates[0]
for i in range(1,len(coordinates)):
if coordinates[i]>=starting_point+med:
count+=1
starting_point=coordinates[i]
if count>=antenna_num:
start=med+1
result=med
else :
end=med-1
print(result)
if __name__ == "__main__":
point_num, antenna_num=map(int,input().split())
inputs=[]
for _ in range(point_num):
inputs.append(int(input()))
solution(inputs,antenna_num)
댓글남기기