저번에 푼 프로그래머스와 비슷한 문제였다. 그런데 상당히 헤매고 풀었기 때문에 다시 한번 풀이를 정리해 본다.
[python3] 프로그래머스 징검다리 풀이 ( 이분탐색 )
왜 이분 탐색문제인지 이해를 할수가 없어서 상당히 헤맸다. 결국 풀이를 봤다. 우선 문제를 읽어보면, 징검다리를 만들 때 n만큼 돌을 제거하고 최솟값을 찾는다. 이때 최솟값을 최대로 만드는
guccin.tistory.com
우선 문제를 읽어보자
문제를 읽어보면 입력으로 x가 0~1,000,000,000의 범위를 가진다. 딱 보자마자 완전 탐색으로는 절대 돌수가 없다. 따라서 이분탐색의 냄새가 난다.
x의 좌표에서 이분탐색의 느낌이 나는데, 우리는 출력으로 두 공유기 사이의 최대 거리를 출력해야한다. 공유기 사이의 최대거리를 만족하기 위해서는 2가지가 필요하다.
1. 최대값 x가 존재할때 x보다 긴 거리에 공유기 설치
2. 집에서 C만큼 공유기 설치
=> 말이 이상하긴 한데, 결국 공유기의 개수와 최대거리를 만족해야한다. 그럼 최대거리를 이분탐색으로 놓고 공유기를 만족하는지 연산을 진행하면 쉽게 구할 수 있다.
N,C = map(int, input().split())
house = []
for _ in range(N):
house.append(int(input()))
house.sort()
L=1
R=house[-1]//2
H=0
while L<=R:
M = (L+R)//2
install = 1
install_list = [house[0]]
for i in range(1,N):
if (house[i] - install_list[-1] >= M):
install_list.append(house[i])
install += 1
if install >= C:
H = M
L = M+1
else:
R = M-1
print(H)
'알고리즘' 카테고리의 다른 글
[pypy3] 백준 12015 풀이 ( 가장 긴 증가하는 부분 수열 2 , LIS , 이분 탐색 ) (0) | 2021.08.28 |
---|---|
#5 알고리즘 공부 8/24 리뷰 (0) | 2021.08.24 |
[python3] 프로그래머스 징검다리 풀이 ( 이분탐색 ) (0) | 2021.08.22 |
코딩테스트 알고리즘별 전략 및 요약 (수정 중...) (0) | 2021.08.20 |
[python3] 백준 1916 풀이 ( 최소비용 구하기, 다익스트라, 그래프 ) (0) | 2021.08.19 |