https://www.acmicpc.net/problem/2110
n, c = map(int, input().split())
data = []
for i in range(n):
data.append(int(input()))
data.sort()
start = 1
end = data[-1] - data[0]
result = []
while start <= end:
first = data[0]
mid = (start + end) // 2
cnt = 1
for i in range(1, n):
if first + mid <= data[i]:
first = data[i]
cnt += 1
if cnt >= c:
start = mid + 1
result.append(mid)
else:
end = mid - 1
print(max(result))
https://programmers.co.kr/learn/courses/30/lessons/60060
너무 어렵다....?;
너무 어렵다...
참고 블로그 :https://deok2kim.tistory.com/94
https://www.acmicpc.net/problem/1365
import sys
def LB(s, lr, Llist):
while s < lr:
m = (s + lr) // 2
if res[m] < Llist:
s = m + 1
else:
lr = m
return lr
n = int(sys.stdin.readline()) #전봇대 개수
L = list(map(int, sys.stdin.readline().split()))
res = []
for i in range(n):
if i == 0: # 첫 번째는 res에 추가
res.append(L[0])
if res[-1] < L[i]:
res.append(L[i])
else:
tmp = LB(0, len(res), L[i])
res[tmp] = L[i]
print(n - len(res))
안녕하세요 알고리줌입니다!
저는 이번 문제가 모두 어렵더라고요.....
수고 많으셨습니다!!