[python_파이썬]프로그래머스_LV1_예산_풀이

2024. 5. 8. 12:35코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/kdCOczz1e9c?feature=shared

 

문제를 만만하게 보면 안된다.

 

처음에 이해한 건 예산에 딱 맞게 들어오는 팀이 몇개인지 구하는 거였다. 남아도 되는걸 인지하지 못함.

 

<첫번째 시도 : 실패_간단한 코드라고 생각했는데 결과보고 정신차림>

 
#처음에 문제를 잘못 이해함 : 예산을 딱 맞추는걸 생각함 -> 예산 안에만 들어오면 됨 : 테스트 7번부터 시간초과
def solution1(d, budget):
    answer = 0
    for i in range(1, len(d)+1):
        for j in itertools.combinations(d, i):
            if sum(j) <= budget and len(j) > answer:
                answer = len(j)        
    return answer

 

<두번째 시도 : 실패_정신차렸는데도 정신 못차림>

#시간초과가 떠서 역으로 했는데 1~7번까지도 몇개 실패
def solution2(d, budget):
    answer = 0
    for i in range(len(d), 1, -1):
        for j in itertools.combinations(d, i):
            if sum(j) <= budget and len(j) > answer:
                answer = len(j)
                print(j)
                break
    return answer

 

<세번째 시도 : 성공_질문하기 보고 힌트 얻음>

이게 진짜 큰 숲을 보고 문제를 찾는거 같다.

코드의 기교와 지식이 아닌 문제 자체를 이해하는 실력이 필요하다.

제일 작은 수부터 오름차순으로 정렬 후 첫번째부터 예산에서 빼주면서 cnt += 1을 하면 최종 가장 많은 부서라고

할 수 있다.고 하는데 잘 모르겠다. 

import itertools

#질문하기 보고 확인 : 가장 작은 예산을 신청하는 부서들을 빼고 음수가 나오기 직전까지를 count한다?
#그럼 가장 많은 부서라고 하는거지???
#이게 통과가 되네;;;; 황당하네;;;;
def solution(d, budget):
    answer = 0
    for i in sorted(d):
        if budget < i:
            break
        else:
            budget -= i
            answer += 1
    return answer

 

<다른사람풀이 참고>

1. pop을 활용한 제거 활용 : 아직까지 pop, del등 제거하는 함수에 익숙하지 않아서 잘 활용을 못하겠다.

def solution(d, budget):
    d.sort()
    while budget < sum(d):
        d.pop()
    return len(d)

 

728x90
반응형