문제
주어진 n마리 만큼의 말이 주어진 거리에 존재한다고 할 때 최대의 거리에 c마리 만큼 놓을 수 있는 수를 찾아라
문제 풀이
def Count(mid):
cnt = 1
#무조건 첫 위치는 인덱스 0번부터 시작!
end_point = Line[0]
#0번 자리엔 이미 확인 했기 때문에 1~n까지
for i in range(1, n):
if Line[i] - end_point >= mid:
cnt += 1
end_point = Line[i]
return cnt
n, c = map(int,input().split())
Line = [int(input()) for _ in range(n)]
Line.sort()
lt = 1
rt = Line[n-1]
res = 0
while lt <= rt:
mid = (lt+rt) // 2
#원하는 말 갯수보다 더 많은 말을 놓아도 정답으로 일단 인정
if Count(mid) >= c:
res = mid
lt = mid + 1
else:
rt = mid - 1
print(res)
- 최대를 찾을 땐 범위를 오른쪽으로 옮겨서 최소를 찾을 땐 범위를 왼쪽으로 옮겨서 찾는다.
- 대략 for 문이 이렇게 진행이 된다. 이때 cnt는 2를 리턴하고 이 값은 c보다 작기에 right에 있는 pointer를 왼쪽으로 옮겨 더 작은 mid를 이용해 최댓값을 찾는 진행을 한다.
'자료구조와 알고리즘 > 개인적인 코딩테스트 관련 풀이' 카테고리의 다른 글
[이분탐색(결정알고리즘)][그리디 알고리즘] - 씨름 선수(그리디 알고리즘) (0) | 2022.07.11 |
---|---|
[이분탐색(결정알고리즘)][그리디 알고리즘] - 회의실 배정(그리디 알고리즘) (0) | 2022.07.11 |
[이분탐색(결정알고리즘)][그리디 알고리즘] - 뮤직비디오(결정 알고리즘) (0) | 2022.07.09 |
[이분탐색(결정알고리즘)][그리디 알고리즘] - 랜선 자르기(결정 알고리즘) (0) | 2022.07.08 |
[이분탐색(결정알고리즘)][그리디 알고리즘] - 이분 검색 (0) | 2022.07.08 |