diff --git "a/_WeeklyChallenges/W21-[BinarySearch]/Assignment_BOJ_1654_\353\236\234\354\204\240\354\236\220\353\245\264\352\270\260.py" "b/_WeeklyChallenges/W21-[BinarySearch]/Assignment_BOJ_1654_\353\236\234\354\204\240\354\236\220\353\245\264\352\270\260.py" new file mode 100644 index 0000000..9fa0485 --- /dev/null +++ "b/_WeeklyChallenges/W21-[BinarySearch]/Assignment_BOJ_1654_\353\236\234\354\204\240\354\236\220\353\245\264\352\270\260.py" @@ -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) \ No newline at end of file diff --git a/_WeeklyChallenges/W21-[BinarySearch]/README.md b/_WeeklyChallenges/W21-[BinarySearch]/README.md new file mode 100644 index 0000000..6245001 --- /dev/null +++ b/_WeeklyChallenges/W21-[BinarySearch]/README.md @@ -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) diff --git a/_WeeklyChallenges/W21-[BinarySearch]/Study_BOJ_2110.pdf b/_WeeklyChallenges/W21-[BinarySearch]/Study_BOJ_2110.pdf new file mode 100644 index 0000000..44c3bcd Binary files /dev/null and b/_WeeklyChallenges/W21-[BinarySearch]/Study_BOJ_2110.pdf differ diff --git "a/_WeeklyChallenges/W21-[BinarySearch]/Study_BOJ_2110_\352\263\265\354\234\240\352\270\260\354\204\244\354\271\230.py" "b/_WeeklyChallenges/W21-[BinarySearch]/Study_BOJ_2110_\352\263\265\354\234\240\352\270\260\354\204\244\354\271\230.py" new file mode 100644 index 0000000..0a784e5 --- /dev/null +++ "b/_WeeklyChallenges/W21-[BinarySearch]/Study_BOJ_2110_\352\263\265\354\234\240\352\270\260\354\204\244\354\271\230.py" @@ -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) \ No newline at end of file