알고리즘 문제 풀이: 파이썬/Programmers

[프로그래머스] 예산

hueco 2021. 6. 15.

 

문제링크 : https://programmers.co.kr/learn/courses/30/lessons/12982

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이:

 

참고한 풀이:

 

비교:

 문제 풀이의 핵심 아이디어는 부서별로 신청한 금액의 합계가 예산(budget)을 넘지 않는 범위에서 최대로 지원할 수 있는 부서의 수를 구하는 문제이다. 나는 풀이에 앞서 예산보다 크지 않는 범위에서 지원가능한 최대 부서의 수를 구하기 위해 입력값으로 주어진 배열 d에서 최솟값을 더하고 예산과 비교하여 문제를 해결했다. 

 배열 d의 합계를 저장할 변수(d_sum)와 부서의 수(cnt)의 초기값을 설정하고 예산보다 작을때 배열 d에서 최솟값을 꺼내 d_sum에 더하고 기존 배열에서 제거했고, 합계가 예산보다 크지 않을 때 부서의 수를 증가시켰다. 그리고 합계가 예산보다 크거나 같을때 cnt를 리턴하게 했다. 이렇게만 풀었을 경우에 테스트 케이스 몇 개에서 런타임 에러가 발생하는 것을 확인했다. 이 문제는 풀이에서 배열 d의 원소를 삭제하다가 배열의 길이가 0일때도 반복문 안의 코드를 실행하는 경우 발생된다는 것을 확인했고, 합계에 d의 값을 더하기 전에 조건문을 추가해주는 것으로 이를 해결했다.

 

 참고한 풀이에서는 먼저 입력값으로 주어진 배열 d를 오름차순으로 정렬하고, 배열 d에서 작은 값부터 예산에서 빼고 예산이 음수가 되는 경우에 반복문을 종료하고 그때의 cnt를 리턴하는 방식으로 해결했다.

코드를 비교해보면 참고한 코드가 나의 코드에 비해서 반복문 안에서 조건문이 간단하다. 문제를 풀때 너무 어렵게 생각하지 말아야겠다.

 

 
 

댓글