상세 컨텐츠

본문 제목

Boj 2512번 예산 python

Algorithm/algorithm feedback

by 개복신 개발자 2021. 7. 13. 11:41

본문

728x90
반응형

이분 검색(결정 알고리즘) 이용

첫번째 시도(틀림)

n=int(input())
budget_list=list(map(int, input().split()))
budget_sum=int(input())

min_budget=budget_sum//n
max_budget=max(budget_list)
res=0

while min_budget<=max_budget:
    mid=(min_budget+max_budget)//2
    for i in range(n):
        if budget_list[i]>mid:
            budget_list[i]=mid
            #여기에서 오류 만약 이전의 mid값이 현재의 mid값보다 작다면 리스트 상에서 변화는 없다
            

    if sum(budget_list)<=budget_sum:
        res=mid
        min_budget=mid+1
    
    else:
        max_budget=mid-1


print(min_budget)
print(res)
print(mid)
print(max_budget)
print(budget_list)

기존 값을 고정값으로 두고 다른 수단을 이용하는 방법 vs 기존 값을 단계별로 수정하는 방법

위의 경우는 리스트 값을 고정하고 다른 변수를 설정해서 코드를 작성함

더 나은 방법임!

 

두번째 시도(답)

n=int(input())
budget_list=list(map(int, input().split()))
budget_sum=int(input())

min_budget=0
max_budget=max(budget_list)

res=0

while min_budget<=max_budget:
    num=0 
    #num=0가 루프 안에 있어야 함!!
    mid=(min_budget+max_budget)//2
    for i in range(n):
        if budget_list[i]>mid:
            num+=mid
        else:
            num+=budget_list[i]
            

    if num<=budget_sum:
        res=mid
        min_budget=mid+1
    
    else:
        max_budget=mid-1


print(res)

*num=0를 루프 밖에 작성하여 오류가 났음

루프 안에 작성하여 지속적으로 값이 초기화 되어야 함!

반응형

'Algorithm > algorithm feedback' 카테고리의 다른 글

Boj 큐2 python  (0) 2021.07.23
Boj 9012 괄호 python  (0) 2021.07.22
Boj 10828 스택 python  (0) 2021.07.19
Boj 3079 입국심사 python  (0) 2021.07.16
Boj 1477 휴게소 세우기 python  (0) 2021.07.16

관련글 더보기

댓글 영역