Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
"""
BOJ #1654. 랜선자르기 (실버2)
https://www.acmicpc.net/problem/1654
유형: Binary Search , Parameter Search
"""
K, N = map(int, input().split())

lines = [int(input()) for _ in range(K)]
# 1. 범위 초기화
start = 1
end = max(lines)
#2. 이분 탐색
while start <= end:
mid = (start + end) // 2
cnt = 0
for line in lines:
cnt += line // mid

if cnt < N:
end = mid - 1
else:
start = mid + 1

print(end)
17 changes: 17 additions & 0 deletions _WeeklyChallenges/W21-[BinarySearch]/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## 🚀4월 4주차 (4/28) 스터디 발제 주제: Binary Search , Parameter Search
> 발제자: 김홍주 (zaqquum)

> [!NOTE]
> 주제: Binary Search , Parameter Searcg

### 🗂️ 스터디 자료
- PDF: [바로가기
](Study_BOJ_2110.pdf)

### 📖 문제
- [백준 #2110. 공유기설치](https://www.acmicpc.net/problem/2110): Binary Search , Parameter Search / 골드 4
- 정답 코드: [Study_BOJ_2110_공유기설치.py](Study_BOJ_2110_공유기설치.py)

### 💻 과제
- [백준 #1654. 랜선 자르기](https://www.acmicpc.net/problem/1654): Binary Search , Parameter Search / 실버 2
- 정답 코드: [Assignment_BOJ_1654_랜선 자르기.py](Assignment_BOJ_1654_랜선자르기.py)
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"""
BOJ #2110. 공유기설치 (골드4)
https://www.acmicpc.net/problem/2110
유형: Binary Search , Parameter Search
"""
import sys
input = sys.stdin.readline

#1. 입력 변수 + 오름차순 정렬
N , C = map(int, input().split())
arr =sorted([int(input()) for _ in range(N)])

#2. “최소 거리 dist”의 탐색 범위 초기화 # 이진 탐색
start = 1 ; end = arr[-1] - arr[0]
answer = 0 # 최소 거리 중 최대 거리

#3.최소 인접 거리 dist 최대값 찾기
#설치 공유기는 dist이상의 간격으로 설치
while start <= end :
mid = (start+end)//2
cnt = 1 # arr[0]은 설치 시작점

#[1] 최소 인접 거리가 mid 이상으로 "최대 설치 가능 공유기 개수계산"
prev = arr[0] # 이전에 설치한 공유기 위치
for i in range(1,N) :
if arr[i] - prev >= mid : # 공유기 등록
prev = arr[i]
cnt+=1
# 공유기 등록하기엔 dist부족한 경우 -> 다음 arr로 이동

#[2] 최소거리 dist 이분 탐색
# True 경우 , 최소거리 Answer 업데이트, 탐색 범위 (mid+1 : end) 이동
if cnt >= C :
answer = max(answer ,mid)
start = mid+1
# False 경우: 탐색 범위 Lower bound로 이동(start : mid)
else :
end = mid - 1

print(answer)
Loading