티스토리 뷰

코딩테스트

공유기 설치

ajaa 2024. 12. 13. 10:09

📌문제

도현이의 집 N개가 수직선 위에 있다. 각각의 집 좌표는 x1, x2, x3...xN이고, 집 여러개가 같은 좌표를 가지는 일은 없다.

도현이는 언제 어디서나 와이파이를 즐기기 위해 집에 공유기 C개를 설치하려고 한다. 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게하여 설치하려고 한다.

C개의 공유기를 N개의 집에 적당히 설치해서 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오.

 

📌풀이

이진 탐색으로 가장 인접한 두 공유기 사이의 거리를 조절해가며 매 순간 C보다 많은 개수로 공유기를 설치할 수 있는지 체크

C보다 많은 개수로 공유기를 설치할 수 있다면 가장 인접한 두 공유기 사이의 거리를 증가시켜서 더 큰 값에 대해서도 성립하는지 체크

 

📌코드

n, c = list(map(int, input().split(" ")))

# 전체 집의 좌표 정보를 입력받기
array = []
for _ in range(n):
    array.append(int(input()))
array.sort()  # 이진 탐색 수행을 위해 정렬

start = 1  # 가능한 최소 거리(min gap)
end = array[-1] - array[0]  # 가능한 최대 거리(max gap)
result = 0

while start <= end:
    mid = (start + end) // 2  # 가장 인접한 두 공유기 사이의 거리
    value = array[0]
    count = 1
    # 현재 mid값을 이용해 공유기 설치
    for i in range(1, n):
        if array[i] >= value + mid:
            value = array[i]
            count += 1
    if count >= c:  # C개 이상 공유기를 설치할 수 있는 경우 거리 증가
        start = mid + 1
        result = mid
    else:  # 거리 감소
        end = mid - 1
print(result)

 

📌참고

https://g.co/kgs/eyd5SSd

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 입사하고 싶은 카카오・삼성전자・네이버・라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다! IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년

www.google.com

 

 

'코딩테스트' 카테고리의 다른 글

금광  (1) 2024.12.16
가사 검색  (1) 2024.12.15
고정점 찾기  (1) 2024.12.12
정렬된 배열에서 특정 수의 개수 구하기  (0) 2024.12.11
카드 정렬하기  (1) 2024.12.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함