Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JobExecutionAlreadyRunningException
- 성능개선
- 스프링 배치 공식문서
- batchInsert
- JSONObject 분할
- spring reactive programming
- org.json
- 날짜형을 문자형으로
- 마리아디비
- nonblocking
- 폐기하기
- 스테이지에 올리기
- 마이바티스 트랜잭션
- 스프링 리액티브 프로그래밍
- JSON 분할
- 스프링 웹플럭스
- 무시하기
- 스프링 배치 메타 테이블
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- 문자형을 날짜형으로
- Meta Table
- JSON 분해
- str_to_date
- multi update
- JSONArray 분할
- jar 소스보기
- git stage
- JSON 분리
- date_format
- spring webflux
Archives
- Today
- Total
ebson
boj.kr/2110 공유기 설치 (gold4) 파이썬 풀이 본문
ALGORITHM STUDY WITH PYTHON/Binary Search
boj.kr/2110 공유기 설치 (gold4) 파이썬 풀이
ebson 2023. 5. 23. 16:101. 집 좌표 리스트를 정렬한다.
2. 집들에 대한 최소거리(1), 최대거리(첫번째 집에서 마지막집까지 거리) 를 구한다.
3. 최소 거리가 최대거리보다 작거나 같으면 아래 4-7을 반복한다.
4. 최소 거리와 최대 거리의 중간값을 계산하고 첫번째 집에 공유기를 설치한다.
5. 집 좌표 목록을 순회하면서 현재 공유기 설치한 집 + 중간값 이상의 좌표에 있으면 공유기를 설치하고 카운트를 1 증감한다.
6. 공유기 개수 이상으로 설치되었으면 거리를 넓힌다. (최소거리 = 중간값+1) result에 중간값를 저장한다.
7. 공유기 개수보다 적게 설치되었으면 거리를 좁힌다. (최대거리 = 중간값-1)
8. result를 출력한다.
N, C = map(int, input().split())
homes = [int(input()) for _ in range(N)]
homes = sorted(homes)
lo = 1
hi = homes[-1] - homes[0]
result = 0
while lo <= hi:
mid = (lo + hi) // 2
cur = homes[0]
cnt = 1
for i in range(1, len(homes)):
if homes[i] >= cur + mid:
cur = homes[i]
cnt += 1
if cnt >= C:
lo = mid +1
result = mid
else:
hi = mid -1
print(result)
참고출처
"[python] 백준 2110 - 공유기 설치", hyojeong94.tistory.com, 2022년 2월 21일 수정, 2023년 5월 23일 접속,
'ALGORITHM STUDY WITH PYTHON > Binary Search' 카테고리의 다른 글
boj.kr/1939 중량제한 (gold3) 파이썬 풀이 (0) | 2023.05.29 |
---|---|
boj.kr/2343 기타 레슨 (silver1) 파이썬 풀이 (0) | 2023.05.28 |
boj.kr/1300 K번째 수 (gold2) 파이썬 풀이 (1) | 2023.05.28 |
boj.kr/2470 두 용액 (gold5) 파이썬 풀이 (1) | 2023.05.27 |
boj.kr/12015 가장 긴 증가하는 부분 수열 2 (gold2) 파이썬 풀이 (0) | 2023.05.27 |
Comments