크래프톤 정글 TIL : 1116

lazyArtisan·2024년 11월 16일
0

정글 TIL

목록 보기
139/147

📚 Journal


최종 발표



⚔️ 백준


📌 1654 랜선 자르기

# 그냥 나눈 몫이 해당 랜선에서 얻을 수 있는 랜선 개수
# 가능한 최대 길이는 랜선의 최소값
# 거기서부터 0까지 이분탐색 조진 후에
# K개의 랜선을 탐색한 길이로 나누면 랜선 몇 개 가질 수 있는지
K, N = map(int,input().split())
LAN = [int(input()) for _ in range(K)]
s, e = 0, min(LAN)
while (s<=e):
    sub_sum = 0
    mid = (s+e)//2
    for L in LAN:
        sub_sum += L//mid
    if sub_sum >= N:
        s = mid + 1
    elif sub_sum < N:
        e = mid - 1
print((s+e)//2)

왜 안되는데

# 그냥 나눈 몫이 해당 랜선에서 얻을 수 있는 랜선 개수
# 가능한 최대 길이는 랜선의 최소값
# 거기서부터 0까지 이분탐색 조진 후에
# K개의 랜선을 탐색한 길이로 나누면 랜선 몇 개 가질 수 있는지
# 최소 길이보다 크더라도 그냥 못 만든다고 무시해버리고도 목표량 달성 가능할수도
K, N = map(int,input().split())
LAN = [int(input()) for _ in range(K)]
s, e = 1, max(LAN)
while (s<=e):
    sub_sum = 0
    mid = (s+e)//2
    for L in LAN:
        if L >= mid:
            sub_sum += L//mid
    if sub_sum >= N:
        s = mid + 1
    elif sub_sum < N:
        e = mid - 1
print((s+e)//2)
  • 시작을 0이 아니라 1로 했어야 함 (문제에서 무조건 된다고 조건 줌)
  • 최소 길이보다 큰 길이로 잘라서 무시되는 막대가 생기더라도 할당량은 채울 수도 있음

0개의 댓글