on my way
[프로그래머스 코딩테스트 연습] 예산 (Python3) Lv1 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12982
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 코드
def solution(d, budget):
d.sort()
while budget < sum(d):
d.pop()
return len(d)
문제 해결 과정
1. 배열 정렬: d.sort()
먼저, 부서별 신청 금액 배열 d를 오름차순으로 정렬한다.
이렇게 하면 가장 적은 금액부터 차례대로 예산을 소모할 수 있게 된다.
2. 총 합 계산: while budget < sum(d):
d.pop()
배열 d의 총 합을 계산한다.
만약 이 총 합이 주어진 예산budget보다 크다면 예산을 초과하게 되므로, 배열의 가장 큰 값을 하나씩 제거합니다.
3. 반복 제거:
배열의 가장 큰 값을 pop()
하는 것은, 현재 배열의 총 합이 예산을 초과할 경우 가장 큰 값을 제거함으로써 예산 내에서 지원할 수 있는 부서의 수를 줄이는 역할을 한다.
배열의 가장 큰 값을 제거하면 총 합이 감소하게 되어 예산 내에 맞출 수 있게 된다.
결과 반환: return len(d)
최종적으로 배열의 길이는 예산 내에서 지원할 수 있는 최대 부서 수를 의미한다.
예시
입력:
d = [1, 3, 2, 5, 4]
budget = 9
과정:
- 배열
d
를 오름차순 정렬.d = [1, 2, 3, 4, 5]
- 현재 총 합은 1 + 2 + 3 + 4 + 5 = 15이며, 이는 예산 9를 초과한다. 따라서 가장 큰 값 5를 제거.
d = [1, 2, 3, 4]
- 다시 합을 계산하면 1 + 2 + 3 + 4 = 10이며, 여전히 예산 9를 초과한다. 따라서 가장 큰 값 4를 제거.
d = [1, 2, 3]
- 이제 합은 1 + 2 + 3 = 6이며, 이는 예산 9 내에 있으므로 멈춘다.
- 최종 배열 길이는 3이므로, 최대 3개의 부서를 지원할 수 있다.
결과:
print(solution(d, budget)) # 출력: 3
핵심 정리
- 배열을 정렬하여 가장 적은 금액부터 예산을 소모하게 한다.
- 총 합이 예산을 초과하면 가장 큰 값을 반복적으로 제거하여 예산 내에 맞춘다.
- 최종 배열의 길이는 지원할 수 있는 최대 부서 수를 의미힌다.
이 방법은 그리디 알고리즘을 사용하여, 가능한 많은 부서를 예산 내에서 지원할 수 있는 최적의 방법을 찾는다.
회고
문제를 잘못 읽고 합이 budget과 같아야만 하는 줄 알고 헤맸다
문제를 똑바로 읽자
반응형
'algorithm > Python' 카테고리의 다른 글
[프로그래머스 코딩테스트 연습] 로또의 최고 순위와 최저 순위 (Python3) Lv1 (1) | 2024.08.22 |
---|---|
[프로그래머스 코딩테스트 연습] 땅따먹기 (Python3) Lv2 (0) | 2024.08.07 |
[프로그래머스 코딩테스트 연습] 기사단원의 무기 (Python3) Lv1 (0) | 2024.08.04 |
[프로그래머스 코딩테스트 연습 > 정렬] 소수 찾기 (Python3) Lv1 (0) | 2024.08.04 |
[프로그래머스 코딩테스트 연습 > 정렬] 가장 큰 수 (Python3) Lv2 (0) | 2024.06.20 |