Skip to content

Commit d8dd9ec

Browse files
committed
[BOJ]#2110. 공유기 설치/골드4/힌트
https://www.acmicpc.net/problem/2110
1 parent 6081f7c commit d8dd9ec

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

Hongjoo/백준/공유기.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
#1. 입력 변수 + 오름차순 정렬
5+
N , C = map(int, input().split())
6+
arr =sorted([int(input()) for _ in range(N)])
7+
8+
#2. “최소 거리 dist”의 탐색 범위 초기화 # 이진 탐색
9+
start = 1 ; end = arr[-1] - arr[0]
10+
answer = 0 # 최소 거리 중 최대 거리
11+
12+
#3.최소 인접 거리 dist 최대값 찾기
13+
#설치 공유기는 dist이상의 간격으로 설치
14+
while start <= end :
15+
mid = (start+end)//2
16+
cnt = 1 # arr[0]은 설치 시작점
17+
18+
#[1] 최소 인접 거리가 mid 이상으로 "최대 설치 가능 공유기 개수계산"
19+
prev = arr[0] # 이전에 설치한 공유기 위치
20+
for i in range(1,N) :
21+
if arr[i] - prev >= mid : # 공유기 등록
22+
prev = arr[i]
23+
cnt+=1
24+
# 공유기 등록하기엔 dist부족한 경우 -> 다음 arr로 이동
25+
26+
#[2] 최소거리 dist 이분 탐색
27+
# 조건 : 설치한 공유기 개수 Cnt 가 C 이상
28+
# True 경우 , 최소거리 Answer 업데이트, 탐색 범위 (mid+1 : end) 이동
29+
if cnt >= C :
30+
answer = max(answer ,mid)
31+
start = mid+1
32+
# False 경우: 탐색 범위 Lower bound로 이동(start : mid)
33+
else :
34+
end = mid - 1
35+
36+
print(answer)

Hongjoo/백준/공유기설치.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
#1. 입력 변수 + 오름차순 정렬
5+
N , C = map(int, input().split())
6+
arr =sorted([int(input()) for _ in range(N)])
7+
8+
#2. “최소 거리 dist”의 탐색 범위 초기화 # 이진 탐색
9+
start = 1 ; end = arr[-1] - arr[0]
10+
answer = 0 # 최소 거리 중 최대 거리
11+
12+
#3.최소 인접 거리 dist 최대값 찾기
13+
#설치 공유기는 dist이상의 간격으로 설치
14+
while start <= end :
15+
mid = (start+end)//2
16+
cnt = 1 # arr[0]은 설치 시작점
17+
18+
#[1] 최소 인접 거리가 mid 이상으로 "최대 설치 가능 공유기 개수계산"
19+
prev = arr[0] # 이전에 설치한 공유기 위치
20+
for i in range(1,N) :
21+
if arr[i] - prev >= mid : # 공유기 등록
22+
prev = arr[i]
23+
cnt+=1
24+
# 공유기 등록하기엔 dist부족한 경우 -> 다음 arr로 이동
25+
26+
#[2] 최소거리 dist 이분 탐색
27+
# 조건 : 설치한 공유기 개수 Cnt 가 C 이상
28+
# True 경우 , 최소거리 Answer 업데이트, 탐색 범위 (mid+1 : end) 이동
29+
if cnt >= C :
30+
answer = max(answer ,mid)
31+
start = mid+1
32+
# False 경우: 탐색 범위 Lower bound로 이동(start : mid)
33+
else :
34+
end = mid - 1
35+
36+
print(answer)

0 commit comments

Comments
 (0)