백준_2805 (나무 자르기_이진탐색_sys.stdin.readline())

RostoryT·2022년 6월 19일
0

Binary Search

목록 보기
4/8

랜선 자르기와 동일한 문제


답은 맞았으나, 시간초과

  • 참고로, 랜선과 다르게, 아래 두 가지 수정해야함
    • if wood - pivot > 0: <<-- 자른게 없는 경우는 더하면 안됨!
    • sum_of_wood += (wood - pivot) <<--랜선과 이게 다름! 나머지를 넣어줌
k, want = map(int,input().split())
arr = list(map(int,input().split()))

start, end = 0, max(arr)

while start <= end:
    pivot = (start+end) // 2
    
    sum_of_wood = 0
    
    for wood in arr:
        if wood - pivot > 0:                # (중요) 자른게 없는 경우는 더하면 안됨!
            sum_of_wood += (wood - pivot)   # (중요) 랜선과 이게 다름! 나머지를 넣어줌
    
    # 내가 원한 길이가 부족하다면 -> 더 잘라야 -> 절단기 낮춰!
    if sum_of_wood < want:
        end = pivot -1
    
    # 내가 원한 길이보다 많아 -> 줄일 필요가 있어 -> 절단기 위로!
    else:
        start = pivot + 1
        
print(end)  # 마찬가지로 가능한 최댓값(end)



sys.stdin.readline() 썼는데도 시간초과

import sys

k, want = map(int,sys.stdin.readline().split())
arr = list(map(int,sys.stdin.readline().split()))

start, end = 0, max(arr)

while start <= end:
    pivot = (start+end) // 2
    
    sum_of_wood = 0
    
    for wood in arr:
        if wood - pivot > 0:                # (중요) 자른게 없는 경우는 더하면 안됨!
            sum_of_wood += (wood - pivot)   # (중요) 랜선과 이게 다름! 나머지를 넣어줌
    
    # 내가 원한 길이가 부족하다면 -> 더 잘라야 -> 절단기 낮춰!
    if sum_of_wood < want:
        end = pivot -1
    
    # 내가 원한 길이보다 많아 -> 줄일 필요가 있어 -> 절단기 위로!
    else:
        start = pivot + 1
        
print(end)  # 마찬가지로 가능한 최댓값(end)

근데 pypy3로 하면 위에 두 코드 다 통과한다?!

다른 블로그 솔루션 보니까 다 pypy3로 하는듯


profile
Do My Best

0개의 댓글