programmers. Level1
javascript - 예산
코딩하는 둥아
2021. 10. 25. 16:36
728x90
[Input]
- d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하입니다.
- d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100,000 이하의 자연수입니다.
- budget은 예산을 나타내며, 1 이상 10,000,000 이하의 자연수입니다.
각 부서별로 신청한 금액을 작은 순으로 나열하여, 정해진 예산 안에서 가장 많은 부서에 지원하면 되겠다! 고 생각했다.
처음에는 sort를 바로 생각하지 못하고, for문을 돌려 가장 최소값을 찾아서 answer에 더해주고 d라는 신청 금액 배열에서 제외하여 다시 최소값을 찾는 비효율적인 방법을 생각했다.
그런데 sort 한번이면 for문 한 번으로 답을 찾을 수 있다.
이 때, d.sort() 로 sorting을 해버리면, 숫자의 대소를 비교하는 것이 아니라 문자의 유니코드를 기준으로 정렬하여 결과값이 틀리게 나온다. 그래서 우리는 숫자 오름차순으로 정렬하기 원하기 때문에 아래와 같은 sort function을 넣어준다.
[sort 기본 사용 방법]
// 오름차순
d.sort(function(a,b) {
return a-b;
});
// 내림차순
d.sort(function(a,b) {
return b-a;
});
// 객체 정렬하기
const arr = [
{name: 'banana', price: 3000},
{name: 'apple', price: 1000},
{name: 'orange', price: 500}
];
arr.sort(function(a, b) {
return a.price - b.price;
});
[내 코드]
function solution(d, budget) {
var answer = 0;
var isPossible = 0;
d.sort(function(a,b) {
return a-b;
});
for(var i=0 ; i<d.length ; i++) {
isPossible += d[i];
if(isPossible <= budget) {
answer++;
} else {
return answer;
}
}
return answer;
}
728x90