티스토리 뷰
S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다.
물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.
부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.
코딩테스트 연습 - 예산 | 프로그래머스
S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원
programmers.co.kr
풀이
function solution(d, budget) {
var answer = 0;
let sum = 0;
d.sort((a,b) => {
return a - b;
});
for(let i = 0; i < d.length; i++) {
sum += d[i];
if(sum > budget) break;
answer++;
}
return answer;
}
1. 최대한 많은 부서가 배정받을 수 있도록 오름차순으로 정렬
2. sum 변수를 정의함
3. for문을 돌면서 각 부서의 예산을 sum에 합쳐줌
4. sum이 예산보다 크면 for문을 끝내고 answer를 반환
5. 그렇지 않으면 answer에 1을 더해주고 반복함
다른 사람의 풀이
function solution(d, budget) {
d.sort((a, b) => a - b);
while (d.reduce((a, b) => (a + b), 0) > budget) d.pop();
return d.length;
}
while문 안에서 reduce를 이용해 합계를 구하면서, budget보다 작아지면 while문을 종료시킴. budget보다 클 땐 맨 뒤에부터 하나씩 pop()으로 제거하고, 마지막으로 d의 길이를 반환함
'1Day 1Algorithm' 카테고리의 다른 글
[DAY 19] 같은 숫자는 싫어 (0) | 2019.10.20 |
---|---|
[DAY 18] 이상한 문자 만들기 (0) | 2019.10.18 |
[DAY 16] 2016년 / 가운데 글자 가져오기 / 수박수박수박수박수박수? (0) | 2019.10.16 |
[DAY 15] 체육복 (0) | 2019.10.15 |
[DAY 14] 프로그래머스 스킬 체크 테스트 Level.2 (0) | 2019.10.14 |
- Total
- Today
- Yesterday
- greedyAlgorithm
- js
- 배치처리시스템
- Algorithm
- 멀티프로그래밍
- OS
- Props
- 배열
- 운영체제
- 우아한테크러닝
- javascript
- reduce()
- Array
- 자료구조
- 알고리즘
- redux-saga
- 프로그래머스
- 컴퓨터공학
- 리액트
- 웹팩
- 1day1algorithm
- 자바스크립트
- React
- 구간합
- 시분할시스템
- sort()
- 타입스크립트
- Typescript
- Webpack
- sort
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |