728x90
반응형
안녕하세요. 민쯔입니다.😊
제가 매주 1개씩 프로그래머스 코딩 테스트 연습문제를 푸는데요.
이번에는 예산 문제를 풀어보았습니다.
이문제가 이상하게 진짜 너무 안풀렸는데 막상 답을 알게 되니까 진짜... 왜 못 풀었지 싶더라고요ㅠㅠ
그럼 해결방안에 대해 설명하겠습니다.
function solution(d, budget) {
var answer = 0;
d.sort((a,b) => a - b);
for (let i of d) {
if (i > budget) {
break;
} else {
budget -= i;
answer += 1;
}
}
return answer;
}
이번 문제는 "최대 몇 개의 부서에 물품을 지원할 수 있는지"를 구하는 문제입니다.
최대로 물품을 지원하기 위해서는 금액이 적은 것 부터빼면 최대한 많이 물품을 지원할 수 있겠지요?
그래서 이번 문제도 저번이랑 비슷하게 sort()를 사용해서 배열을 오름차순으로 먼저 정리해줬습니다.
d.sort((a, b) => a - b); // 오름차순 정리
- 이렇게 안 하고 sort()로 끝내면 테스트 통과 못합니다.
그다음 for문을 이용하여 최대 몇 개의 부서에 물품을 지원할 수 있는지 구했는데요.
저는 for of 문을 사용하여 구하였습니다.
for (let i of d) // 배열의 원소 반환
- for of문은 배열의 원소를 반환하는 반복문입니다.
- d [1,3,2,5,4] 일 경우 1, 3, 2, 5, 4가 출력이 됩니다.
if (i > budget) {break;}
- 부서가 하나만 있는데 예산보다 원하는 금액이 더 클 경우
- d [2], budget=1
- 부서들 중 예산보다 원하는 금액이 더 클 경우
- d [1, 2, 4, 6, 7], budget=5
이럴 경우 break 해서 기존의 answer = 0;으로 반환하기
else { budget -= i; answer += 1; }
- else : i < budget
- 부서가 원하는 금액이 예산보다 작을 경우
- i < budget 때까지 budget -= i; answer += 1; 하기
- budget -= i; : 예산에서 부서가 원하는 금액 빼기
- answer += 1; : 지원 가능 부서 하나씩 더하기
728x90
반응형
'코딩 > 프로그래머스 코딩테스트' 카테고리의 다른 글
[프로그래머스] 실패율 (0) | 2021.10.25 |
---|---|
[프로그래머스] 약수의 개수와 덧셈 (0) | 2021.10.14 |
[프로그래머스] K번째수 (0) | 2021.10.02 |
[프로그래머스] 내적 (0) | 2021.09.24 |
[프로그래머스] 없는 숫자 더하기 (0) | 2021.09.17 |